除了执行以下操作之外,是否有更简单的方法从匹配中仅抓取一个元素:
my $date = ($xml_file =~ m/(\d+)-sys_char/)[0];
# or
my $date = $1 if $xml_file =~ /(\d+)-sys_char/;
是否有一个标志来指定m不返回数组但只是一个$#匹配的连接值,所以我可以这样做:?
my $date = ($xml_file =~ mSOMEOPT/(\d+)-sys_char/);
从最后删除0?
答案 0 :(得分:8)
你想:
my ($date) = ($xml_file =~ m/(\d+)-sys_char/);
这会在$1
中为您$date
。至于你问题的第二部分,没有办法在一个变量中得到所有编号的匹配,但你可以把它们全部放到这样的数组中:
my @matches = ($xml_file =~ m/(\d+)-sys_char/);
这些实际上是相同的语法:当像这样的匹配的左侧是数组时,则返回包含所有子匹配的数组。第一个版本将($date)
转换为单元素数组,丢弃其余的子匹配。
答案 1 :(得分:3)
my ($date) = $xml_file =~ m/(\d+)-sys_char/;
if ( defined $date ) {
}