2
在試圖重寫PERL CORE ::開放的功能,我想這個簡單的測試情況下,其工作原理:
BEGIN {
*CORE::GLOBAL::open = sub {
if (defined $_[2]) {
CORE::open $_[0], $_[1], $_[2];
} else {
CORE::open $_[0], $_[1];
}
}
爲什麼不使用@_工作?:
BEGIN {
*CORE::GLOBAL::open = sub {
CORE::open @_;
}
}
我得到:
不能使用字符串( 「3」)爲標誌裁判而 「嚴格裁判」 ......
我重寫函數的目的是打印一個堆棧跟蹤,每當打開被調用時(在上面的代碼片段中沒有顯示)。
請注意,打開被稱爲與三個參數的形式,但我想概括覆蓋方法,以便我不測試的具體數量的參數,即使我不需要知道多少預計參數。
my $fh;
open $fh, ">", "tmp.dummy" ;
由於原型。另外,如果您想覆蓋打開,您需要在新的匿名子文件中指定正確的原型。 – Miller
也應測試@_的大小,未定義。並處理更多的參數。並且不要忘記1-arg打開:) – ysth