-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 处显式的包名称。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. 这在块中的工作方式与在常规字符串中的工作方式相同。

for此外,在 Perl 中几乎从不需要C 风格的循环。以下是如何以更 Perlish 的风格做同样的事情:

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

它们就像在任何其他双引号字符串中一样工作。如果要$varname进行插值,请使用语法"...${varname}..."。这里的文档也一样。

于 2012-10-19T13:47:52.000 回答