お世話になります。
題名にあります通りなんですが、1_1から1_5にカウントアップしたら
2_1から2_5へとカウントアップするようなスクリプトを考えているのですが
下記の例ですと、1111122222333334444455555となってしまいなす。
どなたか良きアドバイス頂けないでしょうか。宜しくお願いします。
@list = (0, 1, 2, 3, 4, 5);
foreach $b(@list) {
for ( $a = 1 ; $a <= 5 ; $a++ ) {
print "";
print "$a_$b\n" ;

} }

A 回答 (3件)

foreach my $first (1..5) {


foreach my $second (1..5){
print "${first}_$second\n";
}
}

こんな感じの処理でしょうか?
    • good
    • 0

# 示されたプログラムを実行すると、最初に0も5回出力されると思うので、@list = (1, 2, 3, 4, 5); の間違いですよね?



そういう出力になるのは、print "$a_$b\n" で$a_という変数と解釈されているからでしょう。$a_という変数はないのでその部分は何も出力されず、$bだけが展開されている。

これを解決するには、No.1の方も示されている通り、$aの代わりに${a}とするなどすればいいです。print $a, "_$b\n" とか他にも解決策はいろいろありますが。

でもこう書き換えても望みの結果は得られないでしょう。先に動かしたい数字は_の右の数字なのですから、print "${b}_$a\n" という風にaとbを逆にするとかしないといけないと思いますよ。
    • good
    • 0

print "$a_$b\n";


この段階で
$a_
がひとつの変数とみなされています。
つまり、$aとは別に、グローバルに$a_が定義されてしまっている状態になっています。
解決策は、
print "${a}_$b";
とすることなどがあげられますが、
こういったあいまいな記述によるエラーを防ぐためには、
use strict;
と最初に宣言するといいでしょう。(文法が厳しくチェックされるので、あいまいな記述ができなくなります)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング