簡體   English   中英

Filehandle Quirk Perl

[英]Filehandle Quirk Perl

在下面的代碼中,如果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則會通過錯誤的Undefined subroutine &main::FILE called at ./test.pl line xx )。 Perl是否有更好的方法可以實現此目的? (也許這就是為什么裸字文件句柄被視為過時的原因?)

#!/usr/bin/perl

use warnings;

open(FILE,">test.txt");
printf FILE ("Test string inline\n");
close(FILE);


sub FILE
{
    return("Test string subroutine\n");
}

您是否在問如何避免該錯誤? 您可以將手柄包裹在冰壺中

printf({ HANDLE } $pattern, @args);
print({ HANDLE } @args);
say({ HANDLE } @args);

或者由於通常會省略parens, say printprintf

printf { HANDLE } $pattern, @args;
print { HANDLE } @args;
say { HANDLE } @args;

或者您可以使用方法調用

HANDLE->printf($pattern, @args);
HANDLE->print(@args);
HANDLE->say(@args);

嘗試:

#!/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";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM