問題
M1 Mac上でperlを使用した特定ファイル(今回の場合は"test.list")の読み込みを行おうとしたところopen関数で正しくファイル名が認識されずにいた。
具体的には、open (my $IN, $input_file) or die "cannot open $input_file \n";
でdieが毎回選択されてしまいその時点で処理が終わってしまう。
原因
相対パスでの指定が原因だった。
解決策
どうやらファイル名を絶対パスで指定する必要があったみたい。。。
ということでmy %DataHash = mkDataHash("test.list");
のファイル名を絶対パスで指定してあげる。
結果として、my %DataHash = mkDataHash("/Users/ユーザー名/....../test.list");
と書き直してあげたら解決!
perl
#!/usr/bin/perl
use strict;
use Encode;
use utf8;
main();
sub main
{
my $s_code = $ARGV[0];
# test.list のデータをハッシュに格納する関数
my %DataHash = mkDataHash("test.list");
my $f_name = $DataHash{$s_code};
print "$s_code -> $f_name\n";
}
sub mkDataHash
{
my $input_file = $_[0];
my %data_hash;
open (my $IN, $input_file) or die "cannot open $input_file \n";
while(my $line = <$IN>)
{
chomp($line);
my $str = decode_utf8($line);
my @cord_file_name = split(/,/, $str);
$data_hash{$cord_file_name[0]} = $cord_file_name[1];
}
close ($IN);
return %data_hash;
}
補足
試しにUbuntu22.04 LTSで同じコードを試してみたところ相対パスでも問題なくファイルを読み込めました。Windowsの方はわからないがMacの方がperlでファイル操作行う際は注意が必要ですね!