tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

バッククォート文字列

今日、ちょっとだけはまったことメモ。
Perl のバッククォート文字列って、スカラーで返ると思っていたのだけど、リストコンテキストもあるらしい。

#!/usr/bin/perl
use strict;
use warnings;

use Data::Dumper;
my @ls_result = `ls /tmp/aaaa`;
chomp(@ls_result);
print Dumper(\@ls_result);

以下証拠。

tsucchi@over[126]% ls /tmp/aaaa
a  b  c
tsucchi@over[127]% perl a.pl
$VAR1 = [
          'a',
          'b',
          'c'
        ];

で、今日コードを書いているときに、

some_funcion(`some_command`);
#...
sub some_funcion {
    my($some_command_result) = @_; #スカラーでくるんだよね?(思い込み)
    #で、スカラーだと思い込んでるから、こんなこと(↓)やってたりした orz
    my @come_command_results = split(/\n/, $some_command_result);
    #...
}

みたいなことしたら、先頭の1個(1行)しか値が入ってなくて、すごくびっくりした。これって常識なのかな?