Открытие файлов в памяти означает что?

Вы можете открывать дескрипторы файлов в памяти?

В памяти неясно, что это значит?

Если это означает, что вы можете использовать память компьютера, разве это уже не работает?

Ответ 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.