Как вывести на экран Perl массив

Массив — это одна из базовых структур данных в языке программирования Perl. В массиве могут находится элементы разных типов.

Иногда возникает необходимость вывести массив Perl на экран. Есть несколько способов это сделать.

Использование join()

Чаще всего лучший способ для того чтобы вывести значения из Perl массива на экран — это использовать функцию join(). С помощью функции join() создать строку из значений массива, а потом вывести эту строку на экран. Вот пример:

▶ Run
#!/usr/bin/perl

my @arr = (1, 20, 'asdf', 100);

print join(', ', @arr);

Мы определили массив @arr в который разместили несколько чисел и строку, а дальше с помощью join(', ', @arr) мы создали строку и с помощью print вывели ее на экран. Результат работы этого кода: 1, 20, asdf, 100. Этот способ хорош тем что он явный.

Использование Data::Dumper

Иногда бывает необходимо посмотреть на структуру данных, которые хранятся в переменной. Для этого подходит библиотека Data::Dumper. Эта библиотека идет вместе с Perl, отдельно ее ставить не нужно. С помощью Data::Dumper можно посмотреть что находится в переменной. Вот пример кода, который выводит на экран информацию про массив:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = (1, 20, 'asdf', 100);

print Dumper \@arr;

Вывод программы:

$VAR1 = [
          1,
          20,
          'asdf',
          100
        ];

Использование print

Но кроме использования join() или Data::Dumper массив на экран можно вывести с помощью print:

▶ Run
#!/usr/bin/perl

my @arr = (1, 20, 'asdf', 100);

print @arr;

Результат работы программы:

120asdf100

Как вы можете видеть, print @arr напечатал все элементы массива слитно. Элементы массива в выводе никак не разделены. Иногда это то что нужно, а иногда нет.

Но вместо этого способа print @arr часто лучше писать явно print join('', @arr);. Запись с join() более понятна для чтения человеком.

Переменная $,

Существует специальная переменная $,, которая управляет тем как print объединяет элементы массива при выводе. Например, можно дополнить предыдущий пример и поместить в эту переменную символ ,.

▶ Run
#!/usr/bin/perl

$, = ',';

my @arr = (1, 20, 'asdf', 100);

print @arr;

Программа выведет на экран текст в котором элементы массива разделены запятыми: 1,20,asdf,100.

Переменная $, может содержать не только один символ, но и несколько. Если в эту переменную присвоить строку $, = ', ';, то вывод будет будет чуть более наглядным: 1, 20, asdf, 100.

Если в переменную $, присвоить символ \n, то каждый элемент массива будет выведен на отдельной строке:

▶ Run
#!/usr/bin/perl

$, = "\n";

my @arr = (1, 20, 'asdf', 100);

print @arr;

Но чаще всего лучше не использовать переменную $,, а использовать функцию join() для того чтобы явно собирать значения из массива в строку. Проблема с переменной $, заключается в том что значение в ней может быть присвоено в одном месте программы, а print на который влияет эта переменная находится совершенно в другом месте программы. При использовании join() значение разделить сразу видно. Другая проблема переменной в том что она влияет на все print которые расположены после присвоения.

ARRAY(0x561c66b32870)

Иногда при вводе Perl массива на экран можно увидеть строку вида ARRAY(0x561c66b32870). Это означает что на экран выводится не массив, а ссылка на массив. Вот пример кода, который выведет на экран подобную строку:

▶ Run
#!/usr/bin/perl

my @arr = (1, 20, 'asdf', 100);
my $arr_ref = \@arr;

print $arr_ref;

Для того чтобы вывести массив на экран нужно либо использовать Data::Dumper, либо разыменовать ссылку и вместо print $arr_ref; написать print @{$arr_ref};. А еще лучше написать print join('', @{$arr_ref});

Связанные темы

Другие статьи