【问题标题】:perl: print $1, $2...till the endperl: 打印 $1, $2...直到最后
【发布时间】:2013-02-04 08:08:50
【问题描述】:

如何将$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;
    }
}

我的输出:(警告/错误)Can't use string ("3") as a SCALAR ref while "strict refs" in use at ...

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

【问题讨论】:

  • 打印 $1, " " while $ARGV[0] =~ /\+((cd\d))?+/ig;

标签: perl


【解决方案1】:

一种方式:

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


my @arr=split(/\+/,$ARGV[0]);
print join " ",@arr[1..$#arr];

【讨论】:

    【解决方案2】:

    最简单的表达方式是:

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

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

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

    【讨论】:

      【解决方案3】:

      这个怎么样:

      my @matchedwords;
      push (@matchedwords, $1) while ($ARGV[0] =~ /(\+cd\d+)/ig);
      print "@matchedwords";
      

      【讨论】:

        猜你喜欢
        • 2013-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-27
        • 1970-01-01
        • 2015-11-03
        • 2023-01-10
        • 1970-01-01
        相关资源
        最近更新 更多