あなたが言うように、@last_id[0]間違っているので、そうあるべきです$last_id[0]。しかし、これはあなたが見ている問題を引き起こしません。
last_id.txtプログラムは、現在の作業ディレクトリでもない限り、Perlソースファイルと同じディレクトリを検索しないことに注意してください。
まず最初に、このtie行で使用されているエラー変数を次のように変更する必要があります$!
tie my @last_id, 'Tie::File', 'last_id.txt'
or die "Unable to open this file: $!";
変数$iには有用なものが何も含まれていないためです。これにより、の失敗の理由がわかります。これは、そのようなファイルまたはディレクトリがないtieこと以外の理由である可能性があります。
またuse strict、use warningsプログラムの開始時に、見落としがちな単純なエラーにフラグを立てる必要があります。
最後に、ファイル名に絶対パスを追加して、ファイル名を完全修飾してみてください。これにより、プログラムがデフォルトで間違ったディレクトリを検索するという問題を回避できます。
アップデート
ファイルへの書き込みアクセス権がないことが問題である場合は、読み取り専用で開くことで修正できます。
定数Fcntlを定義するモジュールが必要なので、これをプログラムの先頭に配置しますO_RDONLY
use Fcntl 'O_RDONLY';
次に、tieステートメントは次のようになります
tie my @last_id, 'Tie::File', 'last_id.txt', mode => O_RDONLY
or die "Unable to open this file: $!";