Как скопировать содержимое массива в одну переменную в Perl? - PullRequest
0 голосов
/ 18 февраля 2012

У меня есть данные в массиве, как показано ниже.Я хочу скопировать все содержимое в одну переменную.Как я могу это сделать?

IFLADK
FJ
FAILED
FNKS
FKJ
FAILED

Ответы [ 4 ]

4 голосов
/ 18 февраля 2012

Вы можете назначить ссылку на массив

my $scalar = \@array;

… или объединить все строки в массиве

my $scalar = join "\n", @array;
2 голосов
/ 18 февраля 2012

Со ссылкой на предыдущий вопрос Как прочитать n строк над совпавшей строкой в ​​perl? Сохранение нескольких совпадений в массиве:

while (<$fh>) {
    push @array, $_;
    shift @array if @array > 4;
    if (/script/) {
        print @array; 
        push @found, join "", @array;   # <----- this line
    }
}

Вы можете просто использовать скаляр, например$found = join "", @array, но тогда вы будете хранить только последнее совпадение в цикле.

Предположим, что цикл завершен, и теперь у вас есть все совпадения в массиве @found.Если вы хотите, чтобы они были в скаляре, просто присоединитесь снова:

my $found = join "", @found;

Или вы можете просто добавить их все сразу в цикле:

$found .= join "", @array;

Все зависит от того, что вы собираетесьделать с данными.Наличие данных в скаляре редко бывает выгоднее, чем иметь их в массиве.Например, если вы собираетесь его распечатать, разницы нет, поскольку print $found эквивалентно print @found, поскольку print принимает список аргументов.

Если вы намереваетесь интерполироватьсоответствует строке:

print "Found matches: $found";
print "Found matches: ", @found;
2 голосов
/ 18 февраля 2012
$whole = join(' ', @lines)

Но если вы читаете текст из файла, проще просто прочитать все это одним фрагментом, (локально) не определив разделитель записи:

local $/ = undef;
$whole = <FILE>
1 голос
/ 18 февраля 2012

Зависит от того, что вы пытаетесь сделать, но если вы хотите упаковать массив в скаляр, чтобы его можно было извлечь позже, тогда вам может потребоваться Storable .

use Storable;

my @array = qw{foo bar baz};

my $stored_array = freeze \@array;

...

my @retrieved_array = @{ thaw($stored_array) };

С другой стороны, возможно, ваши потребности будут удовлетворены простым хранением ссылки на массив.

my @array = qw{foo bar baz};

my $stored_array = \@array;

...

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