0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Perlでファイルからの読み込み時に起こったバグ for M1Mac

Posted at

問題

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でファイル操作行う際は注意が必要ですね!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?