Use of implicit split to @_ is deprecated at xxx.pl line x.

  • こんなエラーが出たので調べてみた
  • どうやらsplitをスカラーで返すと@_を使うらしい。サブルーチンだと引数の@_破壊になる。
  • 素直に一度配列(リスト)にいれましょう。
#/usr/bin/perl
use strict;
use warnings;
use v5.10;
say scalar ( split //, "perl" );
__END__
Use of implicit split to @_ is deprecated at split.pl line 6.
4

カラコンテキストでは、見つかったフィールドの数を返します。 スカラコンテキストと無効コンテキストでは、配列 @_ に分割結果を 設定します。 しかし、スカラコンテキストや無効コンテキストでの split の使用は 推奨されません; サブルーチンの引数を上書きしてしまうからです。

http://perldoc.jp/docs/perl/5.10.1/perlfunc.pod
  • 悪い例
#/usr/bin/perl
use strict;
use warnings;
use v5.10;

sp_test("broken?");

sub sp_test
{
        say scalar ( split //, "perl" );
        say "@_";
}
__END__
Use of implicit split to @_ is deprecated at split.pl line 10.
4
p e r l