これは私がPerlでファイルを開く方法です:ファイルを開く
open FILE, "</file.ext";
私は関係なく、それはPerlでfile
またはfile.ext
と呼ばれていた場合のファイルfile
を開くにはどうすればよいですか?
これは私がPerlでファイルを開く方法です:ファイルを開く
open FILE, "</file.ext";
私は関係なく、それはPerlでfile
またはfile.ext
と呼ばれていた場合のファイルfile
を開くにはどうすればよいですか?
あなたはgrep
を使用することができます。
use warnings;
use strict;
use Errno qw(ENOENT);
my ($file) = grep { -f $_ } qw(file file.ext)
or die $!=ENOENT;
open my $fh, '<', $file
or die "$file: $!";
私は同様のアプローチをとると思いますが、3進数で行うこともできます。 'open(my $ input、 '<'、-f $ file?$ file:$ file。" ext ")またはdie $! '。 – Sobrique
典型的なアプローチは、ファイルを開くために必要なコードの一部にファイル名を渡すことです。今では、ファイルの名前が何であるかは重要ではありません
sub f {
my ($filename) = @_;
open my $fh, '<', $filename or die "$!";
# do things with $fh
close $fh;
return;
}
、機能f
が開きますそれ(それが存在すると仮定すると、あなたはそれを読み取る権限を持っている):
#!perl
# test-open.pl
use strict;
use warnings;
my $filename = shift @ARGV or die "Missing filename";
open my $fh, '<', $filename or die "$!";
:
f('file');
f('file.ext');
あなたは、コマンドライン引数としてファイル名を渡すことができます
は今、あなたはそれをファイル名を渡し、test-open.plを呼び出す:
perl test-open.pl file
perl test-open.pl file.ext
オープンファイルを返すことができますので、関数外で操作できますか?私はそれを複数回繰り返す必要があります。 – macurie
@macurie間違いなく –
open
失敗した場合は0を返しますので、あなたと一緒にすることができチェーンオープン呼び出し||
またはor
オペレータ。
my $fh;
open ($fh, '<', 'file') ||
open ($fh, '<', 'file.ext') ||
open ($fh, '<', $other_default_filename) ||
die "Couldn't find any acceptable file: $!";
間違ったエラーメッセージで死ぬことがあります。例えば、 'file'を読み込む権限がなく、' file.ext'が存在しない場合、 'No such file or directory'で死ぬでしょう。私の答えを見てください。 – ikegami
以下は、最も使用可能なエラーメッセージを生成します: `file`と`存在file.ext`両方の場合
sub open_if_exists {
my ($qfn) = @_;
my $fh;
open($fh, '<', $qfn)
and return $fh;
$!{ENOENT}
and return undef;
die("Can't open \"$qfn\": $!\n");
}
my $qfn = "file";
my $fh = open_if_exists($qfn) || open_if_exists("$qfn.ext")
or die("Can't open \"$qfn\" or \"$qfn.ext\": $!\n");
をどうなりますか? – Borodin