-2

<<ブロック内で変数iを使用しようとしています。しかし、コンパイルエラーのために失敗します

グローバルシンボル「$i_0」には、D:/development/perl/SupportCases/createFTL.pl行76に
明示的なパッケージ名が必要です。グローバルシンボル「$ i_0」には、D:/development/perl/SupportCases/createFTL.pl行に明示的なパッケージ名が必要です。 76.
グローバルシンボル"$i_1"には、D:/development/perl/SupportCases/createFTL.pl行76に明示的なパッケージ名が必要です。
グローバルシンボル "$ i_1"には、D:/ development / perl / SupportCases/createFTLに明示的なパッケージ名が必要です。 pl行76。
グローバルシンボル「$i_2」にはD:/development/perl/SupportCases/createFTL.pl行76に明示的なパッケージ名が
必要です。グローバルシンボル「$ i_2」にはD:/ development / perl /SupportCases/に明示的なパッケージ名が必要です。 createFTL.pl行76。
グローバルシンボル「$i_0」には、D:/development/perl/SupportCases/createFTL.pl行76に
明示的なパッケージ名が必要です。グローバルシンボル「$ i_1」には、D:/development/perl/SupportCases/createFTL.pl行に明示的なパッケージ名が必要です。 76.
グローバルシンボル"$i_2"には、D:/development/perl/SupportCases/createFTL.plの76行目に明示的なパッケージ名が必要です。

<<ブロック内の変数を定義するにはどうすればよいですか?

ありがとう

my $i = 1;
for ($i = 1; $i <=6; $i++){

my $block = <<BLOCK;
    <#if ((model.fields.txt_Artikel_Z$i?? || model.fields.txt_Artikel_Z$i.value = "") && 
                (model.fields.txt_Artikelnummer_Z$i?? || model.fields.txt_Artikelnummer_Z$i.value = "") &&
                    (model.fields.txt_Anzahl_Z$i?? || model.fields.txt_Anzahl_Z$i.value = "") &&
                        (model.fields.chk_Ware_aus_Z$i_0?? || model.fields.chk_Ware_aus_Z$i_0.value = "") &&
                            (model.fields.chk_Ware_aus_Z$i_1?? || model.fields.chk_Ware_aus_Z$i_1.value = "")&&
                                (model.fields.chk_Ware_aus_Z$i_2?? || model.fields.chk_Ware_aus_Z$i_2.value = "")) 
                                &&
                        (!(model.fields.txt_Artikel_Z$i.value = "") && 
                                !(model.fields.txt_Artikelnummer_Z$i.value = "") &&
                                    !(model.fields.txt_Anzahl_Z$i.value = "") &&
                                        !(model.fields.chk_Ware_aus_Z$i_0.value = "") &&
                                            !(model.fields.chk_Ware_aus_Z$i_1.value = "")&&
                                                !(model.fields.chk_Ware_aus_Z$i_2.value = ""))                                                                                              
        >
        <#else>
            <result type="ERROR" 
                field="txt_Fehlerbericht_Arbeiten_Z$i"
                code="-1" 
                message="Komplette Zeile $i muss ausgefüllt sein!" />

        </#if>
BLOCK

print "$block";

}
4

2 に答える 2

4

補間の変数名があいまいな場合は、中かっこを使用してください。${i}動作するはずです。例:my $string = "${i}_2";。そうでなければ、Perlはあなたがと呼ばれる変数を挿入したいと思うでしょう$i_2。これは、通常の文字列の場合と同じようにブロックでも機能します。

また、PerlではCスタイルのforループはほとんど必要ありません。よりPerlishスタイルで同じことを行う方法は次のとおりです。

foreach my $i (1..6) { ...
于 2012-10-19T13:48:44.760 に答える
3

これらは、他の二重引用符で囲まれた文字列と同じように機能します。補間したい場合$varnameは、構文を使用して"...${varname}..."ください。ヒアドキュメントについても同じです。

于 2012-10-19T13:47:52.000 に答える