我写的子程序有一个奇怪的问题,应该花一定时间并以某种格式打印。问题是$ hours,$ minutes和$ seconds变量似乎未初始化,但通常他们应该根据我的正则表达式获取值。
这是我使用的代码:
parse_datetime1("12:05:30");
sub parse_datetime1 {
my $n = scalar(@_);
print "scalar $n\n";
foreach my $item (@_){
print "An item: $item\n";
}
my $time = (@_);
$time =~ m/(\d+):(\d+):(\d+)/;
my ($hours, $minutes, $seconds) = ($1, $2, $3);
print "Hours : $hours, Minutes: $minutes, Second: $seconds\n";
}
这是输出:
scalar 1
An item: 12:05:30
Use of uninitialized value $hours in concatenation (.) or string at ./test_dst.pl line 56.
Use of uninitialized value $minutes in concatenation (.) or string at ./test_dst.pl line 56.
Use of uninitialized value $seconds in concatenation (.) or string at ./test_dst.pl line 56.
Hours : , Minutes: , Second:
我在这里做错了什么?
答案 0 :(得分:2)
由于你想要获取@_
数组的第一个元素,所以在赋值的左侧创建一个列表,从而制作列表上下文,
my ($time) = @_;
而不是
my $time = (@_);
后面有隐式标量上下文,只返回@_
数组的大小。