当我这样做时:
let url = NSURL(string: "https://website.com/api/loginauth?username=\(usernameField.text!)&password=\(passwordField.text!)")
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
let request = NSURLRequest(URL: url!)
我需要调用一些print $fh 'text';
。
有办法吗?
答案 0 :(得分:4)
您可以tie
a filehandle自定义print
对该文件句柄或该文件句柄上的任何其他操作的行为。
sub PrintNotifier::TIEHANDLE {
my ($pkg, $orignalHandle) = @_;
bless { glob => $orignalHandle }, $pkg;
}
sub PrintNotifier::PRINT {
my ($self,@msg) = @_;
... do whatever you want with @msg here ...
return print {$self->{glob}} @msg;
}
sub PrintNotifier::CLOSE { return close $_[0]->{glob} }
open my $fh, '>', 'some-file';
tie *$fh, 'PrintNotifier', $fh;
print $fh "something"; # calls PrintNotifier::PRINT
答案 1 :(得分:2)
你可以tie
手柄,正如暴民所建议的那样。或者,如果您可以更改代码并且Perl足够新,则可以替换
print $fh 'text';
与
$fh->print('text');
你可能会考虑更清晰的语法;然后你可以子类IO :: File:
package MyFH {
use parent qw/ IO::File /;
use mro; # Get next::method
sub print {
my ($self, @args) = @_;
warn 'Printing ', @args;
$self->next::method(@args);
}
}
my $fh = MyFH->new();
$fh->open('file', '>') or die $!;
但是,
print $fh 'text';
式。
根据您的偏好,您可能会发现新的样式清理器,因为如果您的文件句柄是表达式,则允许
$obj->method()->print('text');
而不是
print {$obj->method()} 'text';
它对Perl 5.14及以上版本透明地工作,并且可以通过添加
使旧版Perls工作回到(至少)5.8use IO::Handle;
到你想要使用它的文件的顶部(只是为了安全起见)。
答案 2 :(得分:0)