匹配子程序中参数的正则表达式

时间:2014-10-07 11:39:14

标签: regex perl

我写的子程序有一个奇怪的问题,应该花一定时间并以某种格式打印。问题是$ 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:

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

由于你想要获取@_数组的第一个元素,所以在赋值的左侧创建一个列表,从而制作列表上下文,

my ($time) = @_;

而不是

my $time = (@_);

后面有隐式标量上下文,只返回@_数组的大小。