2

如何打印 $3,$5,$7,...$n 到最后?

对于输入:来自参数的“ab3+cd1+cd2+cd3+cd4+cd5” 所需输出:“cd1 cd2 cd3 cd4 cd5”

我的代码是这样的:

$num=3;
if ($ARGV[0] =~ /(ab\d)(\+(cd\d))?+/i) {
    while(${$num}) {
        print ${$num}, " ";
        $num += 2;
    }
}

我的输出:(警告/错误)不能使用字符串(“3”)作为标量引用,而“严格引用”正在使用...

我应该对代码进行哪些更改才能获得所需的结果?

4

3 回答 3

5

单程:

#!/usr/bin/perl
use strict;
use warnings;


my @arr=split(/\+/,$ARGV[0]);
print join " ",@arr[1..$#arr];
于 2013-02-04T08:16:35.603 回答
1

最简单的表达方式是:

my @args = $ARGV[0] =~ /cd\d+/g;
print "@args";

当使用/g不带捕获组的修饰符时,捕获括号隐含在整个匹配项周围,并返回匹配项列表。

在双引号字符串中插入数组时,值用空格分隔(或$"变量的任何值)。

于 2013-02-04T11:48:12.427 回答
0

这个怎么样:

my @matchedwords;
push (@matchedwords, $1) while ($ARGV[0] =~ /(\+cd\d+)/ig);
print "@matchedwords";
于 2013-02-04T09:05:38.737 回答