0

除了执行以下操作之外,还有一种更简单的方法可以从匹配中仅获取一个元素:

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 ?

4

2 回答 2

8

你要:

my ($date) = ($xml_file =~ m/(\d+)-sys_char/);

这会让你$1进入$date。至于你问题的第二部分,没有办法在一个变量中获取所有编号的匹配项,但你可以将它们全部放入一个数组中,如下所示:

my @matches = ($xml_file =~ m/(\d+)-sys_char/);

这些实际上是相同的语法:当像这样的匹配的左侧是一个数组时,则返回一个包含所有子匹配的数组。第一个版本制作($date)成一个单元素数组,丢弃其余的子匹配项。

于 2009-11-30T22:10:14.037 回答
3
my ($date) = $xml_file =~ m/(\d+)-sys_char/;

if ( defined $date ) {

}
于 2009-11-30T22:09:42.367 回答