2013-06-19 2 views
2
use Getopt::Long::Configure(pass_through); 
# .... 
GetOptions(
     "display=s" => \$display, 
     "input=s", => \$input, # A strange comma right after "input=s", 
); 

Может кто-нибудь объяснить этот код Perl выше для меня? Второй вариант «input = s» имеет странную запятую. Эта запятая имеет какое-то особое значение здесь?Perl GetOptions странная запятая в одном из вариантов

Большое спасибо,

+0

Вероятно, он случайно остался во время рефакторинга кода. – ikegami

+0

** и ** это безобидно; дополнительные запятые в или в конце списков являются необязательными. – Massa

ответ

3

Неа, это запятая в основном неуместны и не имеет смысла.

Однако это не влияет на код, поскольку передаваемые параметры передаются как хэш, а хеш - это не что иное, как список пар значений ключа. Жир-запятая (хэш-ракета на других языках) => также можно рассматривать как простую запятую - это в основном для обозначения такой пары ключ-значение.

Вы также можете написать это:

GetOptions(
    "display=s", \$display, 
    "input=s", \$input, 
) 

С вашей дополнительной запятой становится:

GetOptions(
    "display=s", \$display, 
    "input=s", , \$input, 
) 

, который не изменяет список вообще, так как два или более запятых и/или ракеты просто обрабатывается perl как одна запятая.

@a = (1, 2, 3, , , 6 => 7, 6); 
print join(",", @a), "\n"; 

1,2,3,6,7,6 

Так что это не вредит, но поскольку это приводит к путанице, я рекомендую удалить его.

+1

Я думаю, вы должны прямо указать, что 2 запятые (или запятая + ракета) просто обрабатываются perl как одна запятая при создании списка, как показано вашим последним фрагментом кода. – DVK

+0

yep, thanks - я пропустил, чтобы упомянуть об этом. Я отредактировал страницу –

+0

Удовлетворительный факт: это даже не побочный эффект. Парсер специально проигнорировал дублируемую запятую. например '1,2,(), 3,4' возвращает то же самое, что и' 1,2,3,4', но они компилируются для разных кодов операций. С другой стороны, '1,2,, 3,4' и' 1,2,3,4' скомпилированы к тем же кодам операций. – ikegami

Смежные вопросы