我对以下代码的输出有问题:
#!/usr/bin/perl
# Opening the file timelog.txt, the "<" indicates that the file is being opened in read mode
open(DATA, "<timelog.txt") or die "Couldn't open file timelog.txt, $!";
# Looping through each line in this file, this each line can be accesed with $_
while(<DATA>) {
# In the line ($_), we search for patters
# We first search the pattern " pts/"
$_ =~ m/ pts//;
# We store the text before this pattern in the variable userId
$userId = "$`";
# We now search for the patter "Word Number Number:Number - Number:Number"
# This pattern is found at the end of each string
$_ =~ m/(w+) (d+) (d+):(d+) - (d+):(d+)/;
# The required variables, i.e. the month start hour, start minutes, end hour and end minutes are extracted
($month, $hours1, $minutes1, $hours2, $minutes2) = ($1, $3, $4, $5, $6);
# $userId." ".$month is used to concatenate the userId along with month with a space between them
# the . is used to concatenate
# If the key already exists, we increase the value of time
if(exists($store{$userId." ".$month})){
$store{$userId." ".$month} += (($hours2 - $hours1)*60) + $minutes2 - $minutes1;
} else {
# If the key does not exist we create a new key value pair
$store{$userId." ".$month} = (($hours2 - $hours1)*60) + $minutes2 - $minutes1;
}
# Note that the key is concatenation of userId and the month
}
# We now loop through the elements and print them
foreach $key (keys %store){
print "$key $store{$key} minutesn";
}
timelog.txt
:
maclawty796 pts/1 10.1.28.122 Mon Oct 24 09:18 - 09:20
maclawty796 pts/1 ip-64-134-238-2. Fri Oct 21 14:23 - 14:25
maclawty796 pts/2 10.1.28.122 Fri Oct 21 09:42 - 09:55
ehowe pts/3 10.1.28.204 Fri Oct 21 09:28 - 09:29
kho398 pts/2 10.1.28.233 Fri Oct 21 09:22 - 09:34
maclawty796 pts/1 10.1.28.122 Fri Oct 21 09:20 - 09:55
maclawty796 pts/1 75.27.188.106 Thu Oct 20 21:09 - 21:23
maclawty796 pts/1 10.1.28.120 Fri Oct 14 09:46 - 09:52
kho398 pts/2 10.1.28.124 Thu Oct 13 09:29 - 09:30
maclawty796 pts/1 10.1.28.128 Thu Oct 13 09:28 - 09:51
maclawty796 pts/2 adsl-75-30-120-1 Wed Oct 12 20:35 - 20:35
maclawty796 pts/1 75-30-120-13.lig Wed Oct 12 19:27 - 19:33
hturner pts/1 tom-nilsons-macb Wed Oct 12 13:30 - 13:32
nnt pts/2 99-59-5-115.ligh Tue Oct 11 15:51 - 15:54
nnt pts/1 hitami yamas Tue Oct 11 15:31 - 17:42
maclawty796 pts/1 leda.local Tue Oct 11 14:10 - 14:11
ehowe pts/2 10.1.28.126 Tue Oct 11 09:21 - 09:24
maclawty796 pts/2 10.1.28.123 Tue Oct 11 09:01 - 09:08
nnt pts/1 10.1.28.210 Tue Oct 11 08:53 - 12:02
nnt pts/1 hitami yamas Tue Oct 11 07:53 - 07:54
nnt pts/1 hitami yamas Tue Oct 11 07:48 - 07:52
maclawty796 pts/1 adsl-75-16-61-10 Mon Oct 10 23:18 - 23:20
nnt pts/1 99-59-5-115.ligh Mon Oct 10 22:16 - 23:11
nnt pts/1 99-59-5-115.ligh Mon Oct 10 22:09 - 22:14
nnt pts/1 99-59-5-115.ligh Mon Oct 10 21:27 - 21:31
maclawty796 pts/2 adsl-75-16-61-10 Mon Oct 10 20:46 - 20:47
nnt pts/1 99-59-5-115.ligh Mon Oct 10 20:19 - 21:22
kho398 pts/2 108-93-76-161.li Mon Oct 10 19:15 - 19:19
kho398 pts/2 108-93-76-161.li Mon Oct 10 19:09 - 19:12
jimquinn409 pts/2 10.1.8.148 Mon Oct 10 17:40 - 17:46
jimquinn409 pts/2 10.1.8.148 Mon Oct 10 17:38 - 17:39
nnt pts/1 99-59-5-115.ligh Mon Oct 10 17:19 - 20:01
jimquinn409 pts/2 10.1.8.148 Mon Oct 10 16:29 - 16:33
jimquinn409 pts/2 10.1.8.148 Mon Oct 10 16:27 - 16:28
nnt pts/1 99-59-5-115.ligh Mon Oct 10 16:01 - 17:18
nnt pts/1 99-59-5-115.ligh Mon Oct 10 15:11 - 15:59
maclawty796 pts/1 10.1.31.27 Mon Oct 10 14:16 - 14:21
johnhouston pts/2 10.1.31.220 Mon Oct 10 12:01 - 12:17
jimquinn409 pts/1 ubuntu.local Mon Oct 10 11:58 - 12:04
kho398 pts/1 10.1.28.244 Mon Oct 10 09:07 - 09:17
maclawty796 pts/1 10.1.31.27 Mon Oct 10 08:45 - 08:49
honeill pts/1 99-59-7-95.light Mon Oct 10 05:42 - 07:14
honeill pts/1 99-59-7-95.light Mon Oct 10 04:26 - 05:26
kho398 pts/1 108-93-76-161.li Sun Oct 9 23:12 - 23:13
kho398 pts/1 108-93-76-161.li Sun Oct 9 20:56 - 21:15
kho398 pts/1 108-93-76-161.li Sun Oct 9 20:54 - 20:56
kho398 pts/1 108-93-76-161.li Sun Oct 9 20:51 - 20:52
kho398 pts/2 108-93-76-161.li Sun Oct 9 20:40 - 20:48
maclawty796 pts/1 adsl-75-27-233-7 Sun Oct 9 20:30 - 20:42
kho398 pts/1 108-93-76-161.li Sun Oct 9 20:15 - 20:19
johnhouston pts/2 99-176-56-113.li Sun Oct 9 19:58 - 20:04
kho398 pts/1 108-93-76-161.li Sun Oct 9 19:48 - 20:00
kho398 pts/3 108-93-76-161.li Sun Oct 9 19:36 - 19:48
kho398 pts/3 108-93-76-161.li Sun Oct 9 19:35 - 19:36
kho398 pts/3 108-93-76-161.li Sun Oct 9 19:32 - 19:34
johnhouston pts/2 99-176-56-113.li Sun Oct 9 19:29 - 19:55
nnt pts/1 99-59-5-115.ligh Sun Oct 9 18:29 - 19:45
kho398 pts/4 108-93-76-161.li Sun Oct 9 18:27 - 19:32
johnhouston pts/3 99-176-56-113.li Sun Oct 9 17:12 - 19:28
nnt pts/2 99-59-5-115.ligh Sun Oct 9 15:38 - 18:31
nnt pts/1 99-59-5-115.ligh Sun Oct 9 15:36 - 18:29
maclawty796 pts/1 10.1.31.27 Fri Oct 7 13:55 - 14:09
maclawty796 pts/1 10.1.31.27 Fri Oct 7 13:39 - 13:41
johnhouston pts/1 99-176-56-113.li Fri Oct 7 12:07 - 13:29
edrodri5722 pts/1 10.1.28.171 Fri Oct 7 09:49 - 09:52
kho398 pts/1 10.1.28.116 Fri Oct 7 09:46 - 09:48
jimquinn409 pts/1 10.1.28.200 Fri Oct 7 09:39 - 09:40
jimquinn409 pts/3 10.1.28.200 Fri Oct 7 08:56 - 09:42
nnt pts/3 hitami yamas Fri Oct 7 07:52 - 07:59
nnt pts/2 99-59-5-115.ligh Fri Oct 7 07:15 - 09:18
nnt pts/1 99-59-5-115.ligh Fri Oct 7 07:13 - 09:30
kho398 pts/1 108-93-76-161.li Fri Oct 7 01:15 - 01:17
kho398 pts/1 108-93-76-161.li Fri Oct 7 01:14 - 01:15
kho398 pts/1 108-93-76-161.li Fri Oct 7 01:12 - 01:13
kho398 pts/2 108-93-76-161.li Fri Oct 7 01:06 - 01:12
kho398 pts/2 108-93-76-161.li Fri Oct 7 01:04 - 01:05
kho398 pts/2 108-93-76-161.li Fri Oct 7 00:53 - 01:04
johnhouston pts/1 99-176-56-113.li Fri Oct 7 00:25 - 01:08
edrodri5722 pts/2 10.1.31.151 Thu Oct 6 22:27 - 22:48
honeill pts/1 jst-pc.local Thu Oct 6 22:19 - 22:53
nnt pts/1 99-59-5-115.ligh Thu Oct 6 19:44 - 19:54
honeill pts/6 jst-pc.local Thu Oct 6 19:43 - 22:19
edrodri5722 pts/5 10.1.31.151 Thu Oct 6 19:40 - 22:40
ehowe pts/2 ubuntu.local Thu Oct 6 19:40 - 20:36
hturner pts/2 97-90-193-108.dh Thu Oct 6 19:12 - 19:22
jimquinn409 pts/3 10.1.8.129 Thu Oct 6 18:21 - 22:54
jimquinn409 pts/5 10.1.8.129 Thu Oct 6 17:59 - 18:08
jimquinn409 pts/5 10.1.8.129 Thu Oct 6 17:55 - 17:58
johnhouston pts/4 99-176-56-113.li Thu Oct 6 17:13 - 22:15
johnhouston pts/4 99-176-56-113.li Thu Oct 6 17:09 - 17:12
johnhouston pts/4 99-176-56-113.li Thu Oct 6 17:07 - 17:08
jimquinn409 pts/3 ubuntu.local Thu Oct 6 16:56 - 18:14
hturner pts/2 97-90-193-108.dh Thu Oct 6 16:43 - 18:43
nnt pts/1 99-59-5-115.ligh Thu Oct 6 16:42 - 19:43
jimquinn409 pts/1 ubuntu.local Thu Oct 6 16:16 - 16:25
hturner pts/4 108-67-52-153.li Thu Oct 6 15:18 - 16:10
hturner pts/3 108-67-52-153.li Thu Oct 6 15:17 - 16:10
honeill pts/3 10.0.18.162 Thu Oct 6 14:00 - 14:15
hturner pts/2 10.1.13.227 Thu Oct 6 13:01 - 15:42
hturner pts/1 10.1.13.227 Thu Oct 6 13:01 - 15:41
maclawty796 pts/6 10.1.31.27 Thu Oct 6 10:02 - 10:11
hturner pts/5 tom-nilsons-macb Thu Oct 6 10:00 - 12:17
hturner pts/4 tom-nilsons-macb Thu Oct 6 09:58 - 12:17
edrodri5722 pts/4 10.1.28.135 Thu Oct 6 09:51 - 09:52
jimquinn409 pts/1 10.1.28.126 Thu Oct 6 09:49 - 12:06
jimquinn409 pts/4 10.1.28.126 Thu Oct 6 09:41 - 09:41
jimquinn409 pts/4 10.1.28.126 Thu Oct 6 09:29 - 09:35
hturner pts/2 10.1.28.167 Thu Oct 6 09:28 - 12:05
mvan682 pts/8 10.1.28.119 Thu Oct 6 09:17 - 09:18
honeill pts/7 10.1.28.163 Thu Oct 6 09:15 - 09:57
jimquinn409 pts/2 10.1.28.126 Thu Oct 6 09:15 - 09:21
jimquinn409 pts/7 10.1.28.126 Thu Oct 6 09:13 - 09:14
jimquinn409 pts/7 10.1.28.126 Thu Oct 6 09:08 - 09:11
ehowe pts/6 10.1.28.155 Thu Oct 6 09:07 - 09:28
maclawty796 pts/5 10.1.28.123 Thu Oct 6 09:05 - 09:28
maclawty796 pts/4 10.1.28.123 Thu Oct 6 09:04 - 09:28
hturner pts/3 10.1.28.167 Thu Oct 6 09:01 - 12:06
honeill pts/2 10.1.28.163 Thu Oct 6 08:59 - 09:14
edrodri5722 pts/1 10.1.28.135 Thu Oct 6 08:56 - 09:47
ehowe pts/2 10.1.28.155 Thu Oct 6 08:49 - 08:54
maclawty796 pts/1 10.1.31.27 Thu Oct 6 08:24 - 08:53
edrodri5722 pts/1 76-202-53-118.li Thu Oct 6 05:11 - 05:23
kho398 pts/1 108-93-76-161.li Thu Oct 6 02:18 - 02:23
kho398 pts/2 108-93-76-161.li Thu Oct 6 00:36 - 02:04
ehowe pts/1 10.0.17.151 Thu Oct 6 00:29 - 00:41
jimquinn409 pts/3 76-202-52-236.li Thu Oct 6 00:21 - 02:28
ehowe pts/1 10.0.17.151 Thu Oct 6 00:11 - 00:22
ehowe pts/1 10.0.17.180 Thu Oct 6 00:05 - 00:11
ehowe pts/1 10.0.17.151 Wed Oct 5 23:17 - 23:26
ehowe pts/1 10.1.6.218 Wed Oct 5 22:06 - 22:20
ehowe pts/1 10.1.6.218 Wed Oct 5 21:38 - 21:48
maclawty796 pts/2 adsl-75-16-59-16 Wed Oct 5 21:04 - 21:07
ehowe pts/3 10.1.6.218 Wed Oct 5 20:53 - 21:28
ehowe pts/2 10.1.6.218 Wed Oct 5 20:46 - 21:02
maclawty796 pts/3 adsl-75-16-59-16 Wed Oct 5 19:20 - 20:04
nnt pts/2 99-59-5-115.ligh Wed Oct 5 19:09 - 20:22
kho398 pts/1 108-93-76-161.li Wed Oct 5 19:00 - 21:31
maclawty796 pts/1 10.1.31.27 Wed Oct 5 15:27 - 16:28
maclawty796 pts/1 :0.0 Wed Oct 5 15:10 - 15:25
maclawty796 pts/1 10.1.31.27 Wed Oct 5 13:34 - 13:42
maclawty796 pts/1 10.1.31.27 Wed Oct 5 13:29 - 13:30
nnt pts/2 99-59-5-115.ligh Wed Oct 5 10:51 - 13:15
nnt pts/1 166.205.141.16 Wed Oct 5 09:28 - 12:07
honeill pts/4 76-202-53-118.li Tue Oct 4 21:12 - 22:47
honeill pts/4 76-202-53-118.li Tue Oct 4 21:02 - 21:11
edrodri5722 pts/1 76-202-53-118.li Tue Oct 4 20:46 - 22:48
jimquinn409 pts/1 10.1.8.233 Tue Oct 4 20:37 - 20:43
edrodri5722 pts/4 76-202-53-118.li Tue Oct 4 20:29 - 20:32
edrodri5722 pts/4 76-202-53-118.li Tue Oct 4 20:02 - 20:09
edrodri5722 pts/3 76-202-53-118.li Tue Oct 4 19:43 - 21:51
nnt pts/2 166.205.141.16 Tue Oct 4 19:19 - 21:54
nnt pts/1 166.205.141.16 Tue Oct 4 18:29 - 20:33
nnt pts/3 108-195-113-206. Tue Oct 4 16:47 - 17:18
maclawty796 pts/2 10.1.31.27 Tue Oct 4 16:43 - 16:59
maclawty796 pts/2 10.1.31.27 Tue Oct 4 16:27 - 16:32
maclawty796 pts/3 10.1.31.27 Tue Oct 4 16:26 - 16:26
maclawty796 pts/2 10.1.31.27 Tue Oct 4 15:05 - 16:26
nnt pts/1 108-195-113-206. Tue Oct 4 14:40 - 17:32
kho398 pts/1 108-93-76-161.li Tue Oct 4 02:22 - 03:08
edrodri5722 pts/1 76-202-53-118.li Mon Oct 3 22:32 - 22:36
edrodri5722 pts/1 76-202-53-118.li Mon Oct 3 20:45 - 22:31
edrodri5722 pts/1 76-202-53-118.li Mon Oct 3 20:44 - 20:44
nnt pts/1 108-195-113-206. Mon Oct 3 16:07 - 19:54
jimquinn409 pts/1 10.1.28.142 Mon Oct 3 09:04 - 09:47
kho398 pts/1 10.1.28.199 Mon Oct 3 09:01 - 09:02
kho398 pts/1 108-93-76-161.li Sun Oct 2 22:27 - 22:29
kho398 pts/1 108-93-76-161.li Sun Oct 2 19:18 - 19:23
kho398 pts/1 108-93-76-161.li Sun Oct 2 18:51 - 19:17
edrodri5722 pts/1 76-202-53-118.li Sun Oct 2 18:28 - 18:47
kho398 pts/1 108-93-76-161.li Sun Oct 2 17:04 - 18:16
maclawty796 pts/1 adsl-75-28-65-14 Sat Oct 1 21:15 - 21:32
maclawty796 pts/1 10.1.31.27 Fri Sep 30 15:19 - 15:20
hturner pts/1 108-67-52-153.li Fri Sep 30 11:06 - 11:13
mvan682 pts/4 10.1.28.119 Fri Sep 30 09:50 - 09:50
kho398 pts/3 10.1.28.199 Fri Sep 30 09:49 - 09:50
kho398 pts/3 10.1.28.199 Fri Sep 30 09:29 - 09:46
mvan682 pts/4 10.1.28.121 Fri Sep 30 09:04 - 09:12
kho398 pts/3 10.1.28.199 Fri Sep 30 09:02 - 09:21
jimquinn409 pts/2 10.1.28.142 Fri Sep 30 09:02 - 11:27
mvan682 pts/2 10.1.28.121 Fri Sep 30 09:02 - 09:02
kho398 pts/2 10.1.28.199 Fri Sep 30 09:00 - 09:01
maclawty796 pts/1 10.1.28.212 Fri Sep 30 08:57 - 09:51
maclawty796 pts/1 adsl-75-28-22-24 Thu Sep 29 20:16 - 20:35
nnt pts/1 108-195-113-206. Thu Sep 29 16:24 - 17:14
jimquinn409 pts/2 ubuntu.local Thu Sep 29 15:24 - 17:40
maclawty796 pts/2 enoch-tang-ima Thu Sep 29 14:21 - 14:22
maclawty796 pts/2 10.1.31.27 Thu Sep 29 14:08 - 14:09
johnhouston pts/2 187.34 -32-94.dhcp Thu Sep 29 13:25 - 13:40
johnhouston pts/1 187.34 -32-94.dhcp Thu Sep 29 13:10 - 15:25
mvan682 pts/3 10.1.28.119 Thu Sep 29 09:47 - 09:48
kho398 pts/2 10.1.28.103 Thu Sep 29 09:47 - 09:51
kho398 pts/2 10.1.28.103 Thu Sep 29 09:44 - 09:46
maclawty796 pts/1 10.1.28.105 Thu Sep 29 09:43 - 09:54
mvan682 pts/3 10.1.28.119 Thu Sep 29 09:23 - 09:24
edrodri5722 pts/2 10.1.28.199 Thu Sep 29 09:20 - 09:23
jimquinn409 pts/1 10.1.28.142 Thu Sep 29 09:20 - 09:28
kho398 pts/3 10.1.28.103 Thu Sep 29 09:08 - 09:15
ehowe pts/2 10.1.28.106 Thu Sep 29 09:07 - 09:10
maclawty796 pts/1 10.1.28.105 Thu Sep 29 09:05 - 09:15
ehowe pts/1 10.1.28.106 Thu Sep 29 08:51 - 08:52
ehowe pts/1 10.1.28.225 Thu Sep 29 08:47 - 08:48
maclawty796 pts/2 10.1.31.27 Thu Sep 29 08:41 - 08:56
ehowe pts/1 10.1.28.225 Thu Sep 29 08:40 - 08:46
honeill pts/1 99-59-7-95.light Thu Sep 29 03:50 - 03:56
edrodri5722 pts/1 76-202-53-118.li Thu Sep 29 01:03 - 01:04
edrodri5722 pts/1 76-202-53-118.li Thu Sep 29 00:59 - 01:03
johnhouston pts/1 187.34 -32-94.dhcp Thu Sep 29 00:49 - 00:55
johnhouston pts/1 187.34 -32-94.dhcp Wed Sep 28 23:40 - 23:43
ehowe pts/1 10.0.17.91 Wed Sep 28 21:57 - 22:12
ehowe pts/1 10.0.17.91 Wed Sep 28 21:23 - 21:53
kho398 pts/2 10.1.8.83 Wed Sep 28 20:16 - 20:18
kho398 pts/2 10.1.8.83 Wed Sep 28 20:13 - 20:13
kho398 pts/2 10.1.8.83 Wed Sep 28 20:10 - 20:11
kho398 pts/2 10.1.8.83 Wed Sep 28 20:06 - 20:07
kho398 pts/2 10.1.8.83 Wed Sep 28 19:53 - 20:00
ehowe pts/1 10.0.17.91 Wed Sep 28 19:17 - 21:11
jimquinn409 pts/1 10.1.8.85 Wed Sep 28 15:25 - 16:22
maclawty796 pts/1 10.1.31.27 Wed Sep 28 14:32 - 14:37
kho398 pts/1 108-93-76-161.li Wed Sep 28 00:28 - 01:05
kho398 pts/1 108-93-76-161.li Wed Sep 28 00:25 - 00:28
maclawty796 pts/1 75.16.62.214 Tue Sep 27 22:32 - 22:44
nnt pts/1 enoch-tang-ima Tue Sep 27 16:26 - 16:26
nnt pts/2 psc147-04-4.loca Tue Sep 27 15:42 - 16:22
johnhouston pts/1 psc147-04-3.loca Tue Sep 27 15:40 - 16:22
maclawty796 pts/1 psc147-04-3.loca Tue Sep 27 15:37 - 15:37
maclawty796 pts/1 psc147-04.local Tue Sep 27 15:26 - 15:26
hturner pts/1 10.1.13.49 Tue Sep 27 12:52 - 12:58
hturner pts/1 10.1.13.49 Tue Sep 27 12:50 - 12:51
jimquinn409 pts/2 10.1.31.27 Tue Sep 27 10:06 - 10:06
honeill pts/2 10.1.31.27 Tue Sep 27 10:05 - 10:06
maclawty796 pts/1 10.1.31.27 Tue Sep 27 10:04 - 10:07
maclawty796 pts/2 10.1.28.120 Tue Sep 27 09:42 - 09:52
edrodri5722 pts/1 10.1.28.207 Tue Sep 27 09:41 - 09:46
mvan682 pts/1 10.1.28.157 Tue Sep 27 09:39 - 09:39
mvan682 pts/1 10.1.28.157 Tue Sep 27 09:33 - 09:37
maclawty796 pts/1 10.1.31.27 Tue Sep 27 08:37 - 08:54
maclawty796 pts/1 adsl-75-30-121-1 Mon Sep 26 22:51 - 23:06
maclawty796 pts/1 75-30-121-143.li Mon Sep 26 22:44 - 22:49
edrodri5722 pts/2 10.1.31.27 Mon Sep 26 12:14 - 12:14
edrodri5722 pts/2 10.1.31.27 Mon Sep 26 12:13 - 12:13
maclawty796 pts/1 10.1.31.27 Mon Sep 26 12:11 - 12:14
maclawty796 pts/1 10.1.28.154 Mon Sep 26 09:55 - 09:55
我不知道为什么我为每个用户得到3个输出(每个应该只有2个(,而第三个是空的。
为了调试目的,请对代码进行一个小的更改:
一开始就添加
use strict;
use warnings;
并输出您捕获的数据
# The required variables, i.e. the month start hour, start minutes, end hour and end minutes are extracted
my ($month, $hours1, $minutes1, $hours2, $minutes2) = ($1, $3, $4, $5, $6);
my $format = "DEBUG: %-25s %3s %02d:%02d %02d:%02dn";
printf $format,$userId, $month, $hours1, $minutes1, $hours2, $minutes2;
# $userId." ".$month is used to concatenate the userId along with month with a space between them
调试信息为您提供了问题来源的线索,您将找出如何纠正它的方向。
注意:您的代码是流动的,因为当登录跨越午夜时,它没有考虑到帐户--计算将获得负时间
经过轻微修改后的代码可能看起来如下(午夜问题仍然存在(
use strict;
use warnings;
use feature 'say';
my $fname = shift || 'timelog.txt';
my %store;
my $re = qr|(w+)s+pts/ds+(.*?)s+w{3} (w{3}) (d+) (d+):(d+) - (d+):(d+)|;
# Opening the file timelog.txt, the "<" indicates that the file is being opened in read mode
open(DATA, '<', $fname)
or die "Couldn't open file timelog.txt, $!";
while(<DATA>) {
next unless /$re/;
my($userId,$host,$month,$hours1,$minutes1,$hours2,$minutes2) = ($1,$2,$3,$4,$5,$6,$7);
# $userId." ".$month is used to concatenate the userId along with month with a space between them
# the . is used to concatenate
# If the key already exists, we increase the value of time
if(exists($store{$userId." ".$month})){
$store{$userId." ".$month} += (($hours2 - $hours1)*60) + $minutes2 - $minutes1;
} else {
# If the key does not exist we create a new key value pair
$store{$userId." ".$month} = (($hours2 - $hours1)*60) + $minutes2 - $minutes1;
}
# Note that the key is concatenation of userId and the month
}
# We now loop through the elements and print them
foreach my $key (sort keys %store){
printf "%-25s - %6d minutesn", $key, $store{$key};
}
最终输出
edrodri5722 Sep - -959 minutes
ehowe Oct - 1020 minutes
ehowe Sep - 2523 minutes
honeill Oct - 2883 minutes
honeill Sep - -60 minutes
hturner Oct - 1080 minutes
hturner Sep - 1440 minutes
jimquinn409 Oct - 8521 minutes
jimquinn409 Sep - -3955 minutes
johnhouston Oct - -540 minutes
johnhouston Sep - 1323 minutes
kho398 Oct - 1080 minutes
kho398 Sep - -4378 minutes
maclawty796 Oct - 9840 minutes
maclawty796 Sep - 3182 minutes
mvan682 Sep - -240 minutes
nnt Oct - 12792 minutes
nnt Sep - 542 minutes
参考:打开正则表达式,Perl正则表达式快速启动