バッククォート文字列
今日、ちょっとだけはまったことメモ。
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行)しか値が入ってなくて、すごくびっくりした。これって常識なのかな?