Я хочу передать дескриптор лексического файла подпрограмме, используя именованный аргумент, но следующее не компилируется:
#!/usr/bin/perl -w
use strict;
my $log_fh;
my $logname = "my.log";
sub primitive {
my ($fh, $m) = @_;
print $fh $m;
}
sub sophisticated {
my ($args) = @_;
print $args->{m};
print $args->{fh} $args->{m} ;
}
open $log_fh, ">", $logname;
print $log_fh "Today I learned ...\n";
primitive($log_fh,"... the old way works ...\n");
sophisticated({
fh=>$log_fh,
m=>"... and the new way requires an intervention by SO.",
});
close $log_fh;
Жалоба:
Scalar found where operator expected at ./lexical.file.handle.pl line 15, near
} $args"
(Missing operator before $args?)
$ perl --version
This is perl, v5.10.1
РаботаетХорошо, когда я использую примитивную технику передачи аргументов, а техника хэширования именованных аргументов работает для части message , но не для части дескриптора файла .Нужна ли мне новая версия print ?