Вызов функции с вагоном аргументов
Sep. 13th, 2007 06:10 pmПодумалось тут, что функции с вагоном аргументов лучше передавать этот вагон не списом, а хэшем. Особенно, если среди передаваемых значений много
undef. Написал пример функции:#!/usr/bin/perl -w
$\ = "\n";
print various('with', 'list');
print various({ 'second' => 'Hash', 'first' => 'mit' });
sub various {
my @ORDER = qw(first second); # Порядок неименованных параметров
my %arg = (); # Хэш парметров
if (ref $_[0] eq 'HASH') {
%arg = %{$_[0]};
} # if
else {
foreach (@ORDER) {
$arg{$_} = shift;
} # foreach
}
return join(':', keys(%arg)) . '=>' . join(':', values(%arg));
} # sub various
Функцию можно запускать обоими способами, результат одинаков:$ ./various.plВесь вопрос, так ли надо писать подобные функции или есть более разумные варианты?
first:second=>with:list
first:second=>mit:Hash
no subject
Date: 2007-09-13 12:56 pm (UTC)Более того, оператор => для этого и сделан, он позволяет не заключать хеш-ключ в кавычки: например так
my $req = HTTP::Request->new(GET => "http://bla-bla-bla");
Без кавычек
Date: 2007-09-13 03:21 pm (UTC)Помнится, мне как-то
Re: Без кавычек
Date: 2007-09-13 03:36 pm (UTC)Re: Без кавычек
Date: 2007-09-13 04:25 pm (UTC)use strict;
my %a = ( A => 'a', B => 'b' );
my @a = ( 1, 2, 3 );
my $a = 1;
print $a{A}.' '.$a{B}."\n";
print $a[$a]."\n";
А если написать
print $a[a]."\n";
то ругается на bareword. Так что я все таки правильно помнил, что работа со строками без кавычек - это именно свойство хеша, а не общая поддержка barewords.
Re: Без кавычек
Date: 2007-09-13 06:27 pm (UTC)