私は、UNIXの最後のコマンドをやや模倣したプログラムを作成しています。私のソリューションでは逆参照を使用しようとしています。私のプログラムはまさにそれがやろうとしていることをしますが、私はランタイムエラー/警告を受け取ります。私の質問は、なぜこのエラー/警告が出てくるのか、このような問題をどうやって解決できるのでしょうか?
私が提供できる情報がさらに必要な場合は、
プログラム実行
./last dodoherty
OUTPUT
Here is a listing of the logins for dodoherty:
1. dodohert pts/1 pc-618-012.omhq. Wed Feb 8 09:19 still logged in
2. dodohert pts/6 ip98-168-203-118 Tue Feb 7 19:19 - 20:50 (01:31)
3. dodohert pts/3 137.48.207.178 Tue Feb 7 14:00 - 15:06 (01:05)
4. dodohert pts/1 137.48.219.250 Tue Feb 7 12:32 - 12:36 (00:04)
5. dodohert pts/21 137.48.207.237 Tue Feb 7 12:07 - 12:23 (00:16)
6. dodohert pts/11 ip98-168-203-118 Mon Feb 6 20:50 - 23:29 (02:39)
7. dodohert pts/9 ip98-168-203-118 Mon Feb 6 20:31 - 22:57 (02:26)
8. dodohert pts/5 pc-618-012.omhq. Fri Feb 3 10:24 - 10:30 (00:05)
Use of uninitialized value $1 in addition (+) at ./odoherty_last.pl line 43.
Use of uninitialized value $2 in addition (+) at ./odoherty_last.pl line 44.
Here is a summary of the time spent on the system for dodoherty:
dodoherty
8
8:6
コード(エラーがどこから来ているのスニペットは、また、これは$ 1と$ 2が使用されている唯一の時間です。)
foreach my $line2 (@user)
{
$line2 =~ /\S*\((\d{2,2})\:(\d{2,2})\)\s*/;
$hours = $hours + $1;
$mins = $mins + $2;
if($mins >= 60)
{
$hours = $hours + 1;
$mins = $mins - 60;
}
}
がどこに定義されない$ 1と$ 2? – Pluckerpluck
@Pluckerpluck '$ 1'と' $ 2'は通常の変数ではなく、読み込み専用の変数で、最後に成功した正規表現のキャプチャグループのマッチを含みます。 – TLP
あなたは '\ d {2,2}'と言う必要はありません。あなたは '\ d {2}'と言うことができます。また、 '$ hours = $ hours + $ 1'は' $ hours + = $ 1'と書くほうが良いでしょう。 – zgpmax