Я очень новичок в Perl, поэтому уверен, что моя путаница здесь просто из-за непонимания синтаксиса Perl и того, как он обрабатывает голые слова. Однако я не могу найти хороших ответов на свой вопрос в Интернете.
У меня был код, который я занимаюсь рефакторингом, он выглядел так
@month_dirs = <$log_directory/*>;
Я изменил $ log_directory, чтобы он загружался с файлом конфигурации (точнее, AppConfig). Теперь вместо экспорта $ log_directory мы выводим $ conf, который является объектом AppConfig. Чтобы получить доступ к загруженным переменным, вы обычно вызываете метод для имени переменной, поэтому я попробовал ...
@month_dirs = <$conf->log_directory()."/*">
Это не удается, потому что я не могу вызвать метод $ conf-> log_directory в том месте, где ожидается заглавное слово. Просто поиграю, я попробовал это вместо этого
$month_directory_command = $conf->log_directory()."/*";
@month_dirs = <$month_directory_command>;
Это все равно не удается, тихо, без каких-либо указаний на то, что это проблема. Я попытался использовать строку непосредственно в алмазе, но это не удалось, по-видимому, алмазом принимаются только голые слова, а не строки. Я удивлен тем, что, поскольку мне вообще не разрешено использовать строку, я думал, что в большинстве мест Barewords может Вместо этого можно использовать строку, просто потому, что большая часть кода реализует отдельную логику, чтобы принимать голые слова и строки, но это не требуется для реализации таким образом?
Я могу выполнить эту работу, точно эмулируя исходный синтаксис
$month_directory_command = $conf->log_directory();
@month_dirs = <$month_directory_command/*>;
Однако мне это кажется некрасивым. Я также не понимаю, почему я могу это сделать, но я не могу создать одно слово с помощью:
$bare_word = $conf->log_directory()/*
or
$month_directory_command = $conf->log_directory();
$bare_word = $month_directory_command/*;
@month_dirs = <$bare_word>;
Почему одни переменные работают с голыми словами, а другие нет? почему я могу использовать переменную масштабирования, но не если она возвращается из вызова метода?
Я попытался найти синтаксис Perl для простых слов, но мне не удалось описать ситуации, когда они не написаны напрямую, а состоят из переменных.
Я надеюсь, что кто-то может помочь мне лучше понять синтаксис голого слова здесь. Что определяет, когда я могу использовать переменную как часть простого слова и могу ли я сохранить ее как переменную?
Я хотел бы придумать более чистый синтаксис для использования заглавного слова в моем алмазном операторе, если можно его предложить, но более того, я хотел бы понять синтаксис, чтобы я знал, как работать с голыми словами в будущем. Обещаю, я пытался разыскать это заранее, но без особого успеха.
Кстати, кажется, предложение в любом случае не использовать голые слова в perl? Есть ли какой-то способ избежать голых слов в операторе алмаза?
use strict;
иuse warnings;
. Голое слово - это слово, вокруг которого ничего нет. Оператор «ромб» означает, что это больше не просто слово. - person Sobrique   schedule 22.12.2015$bare_word
не и не$log_directory/*
- person Borodin   schedule 22.12.2015