perlでglobを使うときの注意

スカラーコンテキストで評価する場合は注意
こんな感じでやると

#!/usr/bin/perl
use strict;
use warnings;
use feature qw(:5.10);
use utf8;

testglob();
testglob();

sub testglob {
    my $path = glob("~/hoge.txt");
    say "file = $path";
}

結果はこうなる

file = /home/yamasita/hoge.txt
Use of uninitialized value $path in concatenation (.) or string at test.pl line 12.
file = 

2回目はundefが返ってる
これはイテレーターになってるので、配列1個と、打ち止めのundefが返ってるから

というわけで、こういうときは配列で受け取ってイテレータを最後まで進めたほうが良い

my $path = @{[glob("~/hoge.txt")]}[0];