如果FILE
语句中(
和printf
之间有空格,请使用以下代码
像
printf FILE ("Test string inline\n");
Perl会将FILE
视为文件句柄,否则
printf FILE("Test string inline\n");
将被视为子程序调用(如果FILE perl没有通过错误Undefined subroutine &main::FILE called at ./test.pl line xx
定义子程序)。 Perl可以实现这个更好的方法吗? (也许这就是为什么bareword文件句柄被认为过时了?)
#!/usr/bin/perl
use warnings;
open(FILE,">test.txt");
printf FILE ("Test string inline\n");
close(FILE);
sub FILE
{
return("Test string subroutine\n");
}
答案 0 :(得分:3)
您是否在询问如何避免意外错误?你可以把手柄包裹在curlies中
printf({ HANDLE } $pattern, @args);
print({ HANDLE } @args);
say({ HANDLE } @args);
或者因为say
,print
和printf
经常省略parens,
printf { HANDLE } $pattern, @args;
print { HANDLE } @args;
say { HANDLE } @args;
或者您可以使用方法调用
HANDLE->printf($pattern, @args);
HANDLE->print(@args);
HANDLE->say(@args);
答案 1 :(得分:0)
尝试:
#!/usr/bin/env perl
use strict;
use warnings;
# --------------------------------------
use charnames qw( :full :short );
use English qw( -no_match_vars ) ; # Avoids regex performance penalty
my $test_file = 'test.txt';
open my $test_fh, '>', $test_file or die "could not open $test_file: $OS_ERROR\n";
printf {$test_fh} "Test string inline" or die "could not print $test_file: $OS_ERROR\n";
close $test_fh or die "could not close $test_file: $OS_ERROR\n";