为了数据输入,我有一个可变大小的哈希,多个元素具有相似的名称。哈希可能是什么样的例子;
至于处理它们,我正在遍历键,用正则表达式检查它们,捕获它们的数字,然后使用该数字来抓取类似编号的元素,就像这样;
foreach $key (sort keys %in){
if($key =~ /wineName(\d+)/){
if($wineTable eq ""){
$wineTable = qq{
<tr>
<td colspan=3 class="label">Wines</td>
</tr>
};
}
$wineName = $key;
$in{$wineName} =~ s/\s/+/g;
$wineFull = "wineFull$1";
$wineHalf = "wineHalf$1";
$wineTable .= qq{
<tr>
<!-- $key -->
<td>$in{$wineName}</td>
<td>\$$in{$wineFull}</td>
<td>\$$in{$wineHalf}</td>
</tr>
};
}
if($key =~ /beerName(\d+)/){
if($beerTable eq ""){
$beerTable = qq{
<tr>
<td colspan=3 class="label">Beers</td>
</tr>
};
}
$beerName = $key;
$in{$beerName} =~ s/\s/+/g;
$beerFull = "beerFull$1";
$beerHalf = "beerHalf$1";
$beerTable .= qq{
<tr>
<!-- $key -->
<td>$in{$beerName}</td>
<td>\$$in{$beerFull}</td>
<td>\$$in{$beerHalf}</td>
</tr>
};
}
if($key =~ /plateName(\d+)/){
if($plateTable eq ""){
$plateTable = qq{
<tr>
<th>Name</th>
<th>Cost</th>
<th>Cook Temperatures</th>
</tr>
};
}
my $plateName = $key;
$in{$plateName} =~ s/\s/+/g;
my $plateCost = "plateCost$1";
my $plateTemp = "plateTemps$1";
if($in{$plateTemp}){
$in{$plateTemp} = 1;
}else{
$in{$plateTemp} = 0;
}
$plateTable .= qq{
<tr>
<!-- $key -->
<td>$in{$plateName}</td>
<td>\$$in{$plateCost}</td>
<td>$in{$plateTemp}</td>
</tr>
};
}
}
我的问题是,由于某种原因,/plateName(\d+)/
没有捕获。所以如果$key == "plateName1"
,$plateCost
最终等于“plateCost”,而不是“plateCost1”。我作为示例给出的散列键是实际示例。考虑到这一点,我需要帮助理解为什么葡萄酒的正则表达式工作,而板的正则表达式不起作用,考虑到它们几乎相同。
答案 0 :(得分:-1)
根据您发布的代码,问题出现在:
$in{$plateName} =~ s/\s/+/g;
你在模式中有太多/
?