использование переменной счетчика в именах ключей хеша Perl - PullRequest
1 голос
/ 29 февраля 2012

У меня есть куча данных поля формы HTML, поступающих в виде хеша, где каждое имя поля становится ключом, а значение поля - значением хеша ... ваш стандартный вывод модуля CGI из:

my $query = new CGI;
my %formdata = $query->Vars;

На этот раз я работаю с коллекцией из нескольких полей формы, каждое из которых имеет числовой суффикс ("name1" "name2" ... "size1" "size2" и т. Д.). Есть ли лучший способ использовать счетчик для обхода группы из них в числовом порядке, чем этот?

for (my $i = 1; $i < 10; $i++) {
  print "  Name $i: " . $formdata{"name$i"} . "\n";
  print "  Size $i: " . $formdata{"size$i"} . "\n";
}

... Это неплохо, но есть ли более простой синтаксис? То есть вот так (но это не работает - Невозможно вызвать метод "name" без ссылки на пакет или объект ):

  print "  Name $i: $formdata{name$i}\n";

Ответы [ 3 ]

6 голосов
/ 29 февраля 2012

Очевидное решение не работает:

  print "  Name $i: $formdata{"name$i"}\n";

, но его можно исправить, заменив любой из наборов фактических двойных кавычек "..." оператором qq (qq{...} или qq(...) или qq/.../ или как угодно):

  print qq{  Name $i: $formdata{"name$i"}\n};

См. «Операторы цитирования и цитирования» на странице руководства perlop .

2 голосов
/ 29 февраля 2012

Обычно я делаю такие вещи, создавая список ключей на основе префикса имени формы.Например,

my @numbers = sort map { /name(\d+)/ } keys %formdata;
foreach my $num( @numbers ) { 
    print "  Name $num: ", $formdata{ 'name' . $num }, "\n";
    ...
}

Это имеет преимущество работы с любым количеством элементов формы.

1 голос
/ 01 марта 2012

Если вы хотите использовать " в строке, ограниченной ", не используйте ее.

print "  Name $i: $formdata{\"name$i\"}\n";

Или измените разделитель.

print qq{  Name $i: $formdata{"name$i"}\n};

Или не используйте ".

print "  Name $i: $formdata{qq{name$i}}\n";
print "  Name $i: $formdata{'name'.$i}\n";
printf "  Name %s: %s\n", $i, $formdata{"name$i"};
print "  Name $i: " . $formdata{"name$i"} . "\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...