Доброго всем времени суток, вот такой вопрос из серии "хак или не хак".
Потребовалось задавать некоторые настройки скрипта в виде опций в командной строке, а те, которые не заданы — те оставлять по умолчанию, и один гигакодер написал что-то вроде нижеследующего (как вы, надеюсь, понимаете, print в данный фрагмент кода я вставил специально, чтобы полюбоваться результатами):
use warnings;
use strict;
use Getopt::Long;
my %vars = (foo => 'abc', bar => 'def');
Getopt::Long::GetOptions('foo=s' => \$vars{foo}, 'bar=s' => \$vars{bar});
for (keys %vars) {
print"$_ => $vars{$_}\n";
}
Вообще-то говоря, в Getopt::Long::GetOptions есть возможность прямо задавать ссылку на хэш в качестве аргумента, но сей комсомолец учился преодолевать трудности, и дал ссылки на элементы хэша. И оно заработало (во всяком случае на Perl 5.8.8), хотя лично я никогда не слышал о такой штуке, как "ссылка на элемент хэша". Откуда, собственно говоря, и вопрос — а не хак ли это?
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Здравствуйте, anonymous, Вы писали:
A>Здравствуйте, slava_phirsov, Вы писали:
_>>Доброго всем времени суток, вот такой вопрос из серии "хак или не хак".
A>Нет, не хак, это просто ссылка на скаляр, а уж где этот скаляр находится — не важно.
Если бы это была "ссылка на просто скаляр", то действие строки 6 привело бы к тому, что $a (который является значением в хэше %b) получил бы значение, равное $c. Вместо этого, произошла замена только в хэше (чему равно значение), но не оригинального скаляра. И только в строке заменилось значение $a.
Здравствуйте, netch80, Вы писали:
A>>Нет, не хак, это просто ссылка на скаляр, а уж где этот скаляр находится — не важно. N>Это не так. Достаточно сделать простенький тест:
N>
N>Если бы это была "ссылка на просто скаляр", то действие строки 6 привело бы к тому, что $a (который является значением в хэше %b) получил бы значение, равное $c. Вместо этого, произошла замена только в хэше (чему равно значение), но не оригинального скаляра. И только в строке заменилось значение $a.