2

$ 3、$ 5、$ 7、... $ nを最後まで印刷するにはどうすればよいですか?

入力の場合:引数からの「ab3 + cd1 + cd2 + cd3 + cd4 + cd5」必須出力:「cd1cd2 cd3cd4cd5」

私のコードは次のようになります:

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

私の出力:(警告/エラー)文字列( "3")をSCALAR refとして使用できませんが、"strictrefs"は...で使用されています。

コードをどのように変更すれば、望ましい結果を得ることができますか?

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 に答える