Какая разница в этих двух объявлениях массива? - PullRequest
0 голосов
/ 26 июня 2019

Хорошо, я понимаю, что мой первоначальный вопрос был действительно плохим.Теперь возьмем 2. Наша цель - повторить поведение следующих команд в Perl, используя только «соединение».

my @arr = qw (A B C D);
@arr = ();
#or
@arr;
#replace the commands above.

Я использовал

splice(@arr)

для замены команды.Но мне было интересно, есть ли разница между написанием

@arr = (); 

и

@arr;

Ответы [ 3 ]

4 голосов
/ 26 июня 2019
my @arr = ();

- беспорядочный, неэффективный способ записи

my @arr;

Что он делает: Создает новый пустой лексически выделенный массив с именем @arr.

Лексически ограниченныйозначает, что @arr виден только (то есть может использоваться только) внутри самых внутренних проклятий (или файла), в которых он содержится.

Присвоение пустого списка массиву очищает его, но вновь созданные массивы гарантированноуже пусто.


my @arr = qw( A B C D );

эквивалентно

my @arr = split(' ', q( A B C D ));

Это удобный (то есть более короткий) способ записи

my @arr = ( 'A', 'B', 'C', 'D' );

Что он делает: Он создает новый лексически выделенный массив с именем @arr и назначает ему четыре строки (A, B, C и D).

Вы получите то же самоерезультат из

my @arr;
$arr[0] = 'A';
$arr[1] = 'B';
$arr[2] = 'C';
$arr[3] = 'D';

(@arr, @arr = ( )) не имеет смысла.Это составляет @arr = ().

my @arr = qw (A B C D); my @arr = (); бессмысленно.Это составляет my @arr;.

1 голос
/ 26 июня 2019

my @arr = объявляет массив и присваивает ему список.

В первом примере список состоит из qw, который «оценивает список слов, извлеченных из STRING, с использованием встроенного пробела в качестве разделителей слов». Итак, qw( A B C D ) - это список 'A','B','C','D'. Можно использовать другие разделители, отличные от (), так же, как с другими операторами типа кавычек.

Во втором примере вы назначаете пустой список новому массиву. Чтобы сделать его эквивалентным первому примеру без использования qw, это может быть:

my @arr = ('A','B','C','D');

или даже:

my @arr = 'A'..'D';

qw для удобства; большинству людей это нравится, некоторым нет. Используйте все, что работает для вас.

1 голос
/ 26 июня 2019

my @arr = (); объявляет переменную perl @arr как локальную для объема вложенного блока. Объявление в заголовке: @a, @a = () определяет @a глобально. Эти ссылки могут помочь вам:

Как мне использовать ключевое слово "my" в Perl?

Зачем объявлять переменную Perl с "my" в области видимости файла?

и из perldoc:

https://perldoc.perl.org/functions/my.html

если вы использовали такие модули, как use strict, ваша программа не будет работать, если переменная не была определена с помощью my.

my @arr = qw(foo bar) - это стиль Perl . Это более или менее соглашение языка Perl (например, как код Python Pythonic ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...