В некоторых функциях я добавляю параметр:
..., bool verify = true)
Истинный бросок средств, ложные средства возвращают некоторое ошибочное возвращаемое значение. Таким образом, кто бы ни использует эту функцию, имеет обе опции. Значение по умолчанию должно быть верным, в пользу тех, кто забывает об обработке ошибок.
Код:
push @data, (split//, $line);
помещает все элементы в текущей строке в @data
и
push @data, [split //, $line];
помещает ссылку на анонимный массив, содержащий эти элементы, в @data
Если вы обрабатываете только одно значение '$ line', вероятно, более эффективно использовать первое * 1 , однако, если вы обрабатываете файл, содержащий несколько строк, и вы хотите различать строки, на которых находится контент, последнее более эффективно.
Учтите:
my @data;
while( my $line = <$fh> ){
push @data , ( split //, $line );
}
use Data::Dumper;
$Data::Dumper::Indent = 0;
$Data::Dumper::Terse = 1;
print Dumper( \@data );
Это приведет к тому, что все считанные байты будут отдельными символами, одним массив, содержащий их все, например:
[ "a", "b" , "c" , "\n", "d", "e", "f" ]
Когда это вместо этого будет делать что-то совершенно другое:
my @data;
while( my $line = <$fh> ){
push @data , [ split //, $line ];
}
use Data::Dumper;
$Data::Dumper::Indent = 0;
$Data::Dumper::Terse = 1;
print Dumper( \@data );
И вместо этого сгруппирует строки следующим образом:
[ [ "a", "b", "c" , "\n" ], [ "d" , "e", "f" , "\n" ] ]
Таким образом, вы можете позже программно перемещаться по нему проще.
push @data, ( split //, $line );
и
push @data, split //, $line;
эквивалентны.
Кроме того,
my @other = ( 1,2,3 );
push @data, @other ;
и
push @data, 1,2,3;
эквивалентны.
Из perldoc -f push
push ARRAY,LIST Treats ARRAY as a stack, and pushes the values of LIST onto the end of ARRAY. The length of ARRAY increases by the length of LIST. Has the same effect as for $value (LIST) { $ARRAY[++$#ARRAY] = $value; } but is more efficient. Returns the number of elements in the array following the completed "push".
* 1: на самом деле, tbf, любой, у кого половина мозга, вероятно, захочет @data = split //, $ line
Это из одного из моих ответов :
push @data, [ split //, $line ];
@data
- это массив ссылок на массив. Каждый элемент @data
является ссылкой на анонимный массив, записи которого являются символами в $ line
.
См. Также perldoc perlreftut .