Perl如何在字符串块中使用变量<<参数

时间:2012-10-19 13:44:24

标签: perl

我尝试在<<块中使用变量i。但由于编译错误,它失败了

  

全球符号&#34; $ i_0&#34;需要显式的包名称   D:/development/perl/SupportCases/createFTL.pl第76行   全球符号&#34; $ i_0&#34;需要显式的包名称   D:/development/perl/SupportCases/createFTL.pl第76行   全球符号&#34; $ i_1&#34;需要显式的包名称   D:/development/perl/SupportCases/createFTL.pl第76行   全球符号&#34; $ i_1&#34;需要显式的包名称   D:/development/perl/SupportCases/createFTL.pl第76行   全球符号&#34; $ i_2&#34;需要显式的包名称   D:/development/perl/SupportCases/createFTL.pl第76行   全球符号&#34; $ i_2&#34;需要显式的包名称   D:/development/perl/SupportCases/createFTL.pl第76行   全球符号&#34; $ i_0&#34;需要显式的包名称   D:/development/perl/SupportCases/createFTL.pl第76行   全球符号&#34; $ i_1&#34;需要显式的包名称   D:/development/perl/SupportCases/createFTL.pl第76行   全球符号&#34; $ i_2&#34;需要显式的包名称   D:/development/perl/SupportCases/createFTL.pl第76行。

我如何定义&lt;&lt;&lt;&lt;&lt;&lt;&lt;块?

由于

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";

}

2 个答案:

答案 0 :(得分:4)

如果插值中的变量名称不明确,请使用大括号。 ${i}应该有效。例如:my $string = "${i}_2";。否则Perl会认为您要插入一个名为$i_2的变量。这在块中的作用与在常规字符串中的作用相同。

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

foreach my $i (1..6) { ...

答案 1 :(得分:3)

它们就像任何其他双引号字符串一样工作。如果您希望插入$varname,请使用语法"...${varname}..."。对于here-doc也一样。