Если это означает, что вы можете использовать память компьютера, разве это уже не работает?
Ответ 1
Это означает, что вы можете использовать дескрипторы файлов для записи и чтения из скалярных переменных.
my $var = "";
open my $fh, '>', \$var;
print $fh "asdf";
close $fh;
print $var; # asdf
В конечном счете, это всего лишь один способ сделать
$var .= "asdf"
но есть контексты, где более удобно или более целесообразно использовать парадигмы filehandle, чем парадигмы манипуляции с строкой.
Например, начните с этого кода:
open my $fh, '>', $logfile;
...
print $fh $some_message_to_be_logged;
... 500 more print $fh statements ...
close $fh;
Но знаешь что? Теперь я предпочел бы записывать свои сообщения журнала в скалярную переменную, возможно, поэтому я могу искать их, манипулировать ими до их записи на диск и т.д. Я мог бы изменить все мои операторы print на
$logvar .= $some_message_to_be_logged
но в этом случае удобнее просто изменить оператор open.
open my $fh, '>', \$logvar
Ответ 2
Вы можете открывать дескрипторы файлов непосредственно скалярным переменным. Его особенно полезно, когда у вас есть что-то, что должно вести себя как файл, но вы не хотите его на диске. Этот пример взят из perldoc:
close STDOUT;
open(STDOUT, ">", \$variable)
or die "Can't open STDOUT: $!";
Он закрывает STDOUT, а затем снова открывает его на $variable.