sub do_printf { printf @_ }
sub do_sprintf { print sprintf @_ }
do_printf("%s\n", "ok"); # prints ok
do_sprintf("%s\n", "ok"); # prints 2
Run Code Online (Sandbox Code Playgroud)
cod*_*lic 14
sprintf有原型$@而printf有原型@
请参阅codeholic's和Mark's答案,了解他们为什么表现不同.
作为一种解决方法,只需:
sub do_sprintf { print sprintf(shift, @_) }
Run Code Online (Sandbox Code Playgroud)
然后,
sub do_printf { printf @_ }
sub do_sprintf { print sprintf(shift, @_) }
do_printf("%s\n", "ok"); # prints ok
do_sprintf("%s\n", "ok2"); # prints ok2
Run Code Online (Sandbox Code Playgroud)