我可以根据一些非参数值选择一个多参数,但我必须至少有一个参数,这样我才能where
在其中拼凑:
our $*DEBUG = 1;
debug( 'This should print', 'Phrase 2' );
$*DEBUG = 0;
debug( 'This should not print' );
multi debug ( *@a where ? $*DEBUG ) { put @a }
multi debug ( *@a where ! $*DEBUG ) { True }
我似乎记得有人用来在完全不带参数的 multis 中调度的一些技巧。例如,我有一个show-env
例程我想四处散播,并且只有在我设置了一些调试条件时才会执行任何操作。我可以像我展示的那样实现它,但这并不是很令人满意,而且这不是我想象的我在其他地方看到的聪明的事情:
our $*DEBUG = 1;
debug( 'This should print', 'Phrase 2' );
show-env();
$*DEBUG = 0;
debug( 'This should not print' );
show-env();
multi debug ( *@a where ? $*DEBUG ) { put @a }
multi debug ( *@a where ! $*DEBUG ) { True }
# use an unnamed capture | but insist it has 0 arguments
multi show-env ( | where { $_.elems == 0 and ? $*DEBUG } ) { dd %*ENV }
multi show-env ( | where { $_.elems == 0 and ! $*DEBUG } ) { True }
我可以用可选的命名参数做类似的事情,但这更不令人满意。
当然,我可以在这个简单的例子中这样做,但这并不好玩:
sub show-env () {
return True unless $*DEBUG;
dd %*ENV;
}