プロが教える店舗&オフィスのセキュリティ対策術

[aaa]のようなテンプレートを読み込んで[aaa.out]のような記述を生成しようとして[aaa.pl]のような
記述をしたのですがどうしても数字の部分が一定値(31)のままになってしまいます。どうしてでしょうか?
※初歩的な質問で恐縮ですが、よろしくお願いします。

[aaa:テンプレート(##の部分に数字を31から0まで入れる)]
IOBUF_PCI33_3 AD##(
.I(AD_O[##]),
.O(AD_I[##])
);
---------------------------------------
[aaa.out:希望する出力]
IOBUF_PCI33_3 AD31(
.I(AD_O[31]),
.O(AD_I[31])
);
IOBUF_PCI33_3 AD30(
.I(AD_O[30]),
.O(AD_I[30])
);
...

IOBUF_PCI33_3 AD0(
.I(AD_O[0]),
.O(AD_I[0])
);
------------------------------------
[aaa.pl: 作成したperl]
#! /usr/local/bin/perl
@template = <>;
for($i=31; $i>=0; $i--){
foreach (@template){
s/##/$i/;
print $_;
}
}
------------------------------------

A 回答 (1件)

foreachは、ループの要素を直接参照しますので、s///で@templateの内容が書き換えられているのでしょう。



一旦別の変数に代入したものを、置換するようにしては。
foreach my $s ( @template ){
$_ = $s;
以下略
    • good
    • 0
この回答へのお礼

お礼が遅れましてすみません。
この方法でばっちりOKでした!!
原理がまだいまいちピンときていないのですが、会社に"Programming Perl"の本があるので、
foreachのところを復習しようと思います。
普通の参考書にはこのような内部処理的な話しはあまり出ていないと思われるのですが、何か参考書としてお勧めのもの
をご存知でしたらアドバイス頂ければ幸いです。
また問題にぶち当たった時は宜しくお願いいたします。

お礼日時:2003/07/27 21:30

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