2013-02-27 3 views
0

Проблема очень проста, но я не могу найти его:Основной проблемой извлечения массив или строку из файла с помощью Storable извлечения

Я хранить $string к $filename:

store [$tempstring], $filename2[$m];

Я затем попытаться получить его:

my $tempinput = retrieve ($filename2[$m]);

Я считаю, что я просто получить ссылку, а не строку? Могу ли я использовать команду для преобразования данных обратно в исходную строку?

+0

Хорошо, подтверждено, что этот пример кода работает: #!/Opt/perl/bin/perl Предупреждения об использовании; использовать строгое; use Storable; my @a = (1, 2, 3); магазин (\ @ a, "array.dat"); my @ a2 = @ {retrieve ("array.dat")}; print "Значение: $ a2 [1]"; –

+0

, если вы не уверены, что никогда не будете извлекать данные на другом компьютере или даже версии ОС, используйте nstore, а не хранилище. – ysth

+0

Зачем вам сохранять Storable, если все, что вам нужно сохранить, это одна строка? – cjm

ответ

0
my $ref = [ $tempstring ]; 

создает массив, присваивает $tempstring к нему (поместив его в первом элементе), а затем возвращает ссылку на этот массив.

Итак, если вы хотите вернуть строку, вам нужно получить значение первого элемента ссылочного массива.

$ref->[0] 

Если вы сделали

my $ref = \$tempstring; 

вместо понапрасну создания массива, вы бы просто сделать

$$ref 

, чтобы получить строку.

+0

Отлично, спасибо, заставил его работать. –

+0

Пожалуйста, сообщите об этом, установив отметку рядом с ответом. Добро пожаловать в StackOverflow! – ikegami

+0

Вот что я сделал, чтобы сохранить строку, а затем получить ее: my $ ref = [$ tempstring]; магазин ($ ref, $ filename2 [$ m]); my @ a2 = @ {retrieve ($ filename2 [$ m])}; –