在接下来的代码中,我希望将$a
和$b
设置为02 02
(即$l
中第二个匹配的值)如果我添加了行($a,$b)=($1,$2);
,它可以工作,但如果可能,我宁愿在一行中完成。
有人能告诉我什么是错的吗?
#!/usr/bin/perl -w
my $l = "01:01 02:02";
my ($a,$b);
if ( ($a,$b) = ( ( $l =~ /(\d\d):(\d\d)/g)[1] ) ) {
print "12 $1 $2\n";
print "ab $a $b\n";
}
输出:
12 02 02 Use of uninitialized value $b in concatenation (.) or string at ./gs.pl line 11. ab 01
答案 0 :(得分:2)
首先,请勿使用$a
或$b
作为变量名称。 sort
使用了这些内容 - 如果您最终在同一范围内进行排序,您将开始怀疑会发生什么。
因此,由于缺少更好的名字,请试试$h
和$m
。
那么,现在,$l =~ /(\d\d):(\d\d)/g
在列表上下文中返回了什么?它返回它找到的所有值:("01","01","02","02")
。现在你明白为什么[1]
没有得到你正在寻找的东西吗?
根据您正在做的事情,这可能就像使用[-2,-1]
作为索引查找一样简单(总是得到最后两个)。或者可能是你想要遍历所有配对并做一些事情。没有足够的背景,但这应该给你一些想法继续下去。