gpt4 book ai didi

perl - 如何重新定义内置 Perl 函数?

转载 作者:行者123 更新时间:2023-12-03 14:35:12 26 4
gpt4 key购买 nike

我想做两件事:
在生产代码中,我想重新定义 open 命令以使我能够添加自动文件日志记录。我从事数据处理应用程序/流程的工作,作为其中的一部分,让用户准确了解正在处理的文件非常重要。如果他们使用旧版本的文件,他们找出的一种方法是通读正在处理的文件列表。
我可以创建一个新的子程序来执行此日志记录并返回一个文件指针并在我的代码中使用它代替 open 。
如果我可以重新定义 open 并使预先存在的代码受益于这种行为,那就太好了。我可以这样做吗?
在调试代码中,我想重新定义 printf 命令以插入注释以及指示生成该行的代码的书面输出。同样,我有一个可以选择执行此操作的子程序,但是转换我现有的代码很乏味。

最佳答案

对于开放: 这对我有用。

use 5.010;
use strict;
use warnings;
use subs 'open';
use Symbol qw<geniosym>;

sub open (*$;@) {
say "Opening $_[-1]";
my ( $symb_arg ) = @_;
my $symb;
if ( defined $symb_arg ) {
no strict;
my $caller = caller();
$symb = \*{$symb_arg};
}
else {
$_[0] = geniosym;
}
given ( scalar @_ ) {
when ( 2 ) { return CORE::open( $symb // $_[0], $_[1] ); }
when ( 3 ) { return CORE::open( $symb // $_[0], $_[1], $_[2] ); }
}
return $symb;
}

open PERL4_FH, '<', 'D:\temp\TMP24FB.sql';
open my $lex_fh, '<', 'D:\temp\TMP24FB.sql';

对于 Printf: 你检查过这个问题吗? -> How can I hook into Perl’s print?

关于perl - 如何重新定义内置 Perl 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/651124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com