Когда вы читаете из файла, вы получаете строку (или несколько строк, если вы читаете построчно). Парсер Perl анализирует только исходный код, переданный интерпретатору Perl, а не все, что вы читаете из файлов или где-либо еще. Вы можете использовать функцию eval , чтобы вычислять произвольные строки, подобные этой, как код perl и возвращать результат последнего выражения (в данном случае, список строк), но строка eval опасна, потому что она может запустить любую код; если вы случайно прочитали файл, содержащий system 'rm -rf ~/*'
, у вас есть проблема.
Лучший вариант - хранить ваши данные в известном формате сериализации. Обычный формат, используемый для таких вещей: JSON , потому что он аккуратно отображается в структуры данных Perl, но вы также можете просто хранить свои строки в виде строк (без синтаксиса Perl, например, в кавычках) для простого случая, подобного этому. Существует множество других опций, таких как YAML или даже XML, но их сложнее декодировать; и двоичные форматы, такие как Storable, Sereal и CBOR, но они не читаются человеком, поэтому взаимодействовать с ними может только ваш код.
use strict;
use warnings;
use JSON::MaybeXS;
# if you store it as JSON: {"SGBK":"PRINT","SGDVD":"VIDEO"}
my %format_key = %{decode_json($output)};
# or from an even-sized array: ["SGBK","PRINT","SGDVD","VIDEO"]
my %format_key = @{decode_json($output)};
# if you store it as one value per line
my %format_key = split /\n/, $output;