1

始める前に、私はPerlの専門家ではないことをお知らせしたいと思います。私に割り当てられたいくつかの特定のタスクのために、私は始めたばかりです。

このタスクの要件は、ファイルの拡張子(.dat)を抽出し、それを。に置き換えること.trgです。問題は、作成する.datファイルを圧縮していることです。$filename.dat.gz拡張子を抽出して置き換えると、$filename.dat.trg理想的には必要なときに取得でき$filename.trgます。

コードに関しては(これは非常に古い「レガシー」コードのようであり、他の人によって維持されていた/維持されているので、あまりいじりたくない)、これはそれが置かれる方法です

#prepare the trigger file
#get the extension  
my @contains_extension = split (/\./ , $filename);
my $ext = $contains_extension[-1];

#replace with  a ".trg" extension
my $remote_trgfile = $filename;
$remote_trgfile =~ s/$ext$/trg/;
my $trgfile = $out;
$trgfile =~ s/$ext$/trg/;

$filename上記のコードでは、接尾辞が付いていることを覚えておいてください。.dat.gzつまり、ファイル名は$filename.dat.gz

.dat誰かが拡張機能(と.gz)の両方を抽出してそれを置き換えるより簡単な方法で私を助けてくれたら幸いです.trg

4

2 に答える 2

4

.gzしたがって、オプションの?を含むファイル名の「拡張子」を変更したいのです。試す:

$filename =~ s{\.[^.]*(?:\.gz)?$}{.trg}
于 2012-08-01T16:57:52.773 に答える
0

試す

$filename =~ s/\..*$/.trg/;

拡張機能をキャプチャするために、そのような凝った分割作業をすべて行う必要はありません:)

壊す:

。一致します。。*はすべてに一致します(改行を除く)$は文字列の末尾に一致します

次に、それを.trgに置き換えます。

つまり、基本的には最初の「。」の後にすべてを取っているだけです。.trgに置き換えます

それが役立つことを願っています:)

于 2012-08-01T16:24:40.763 に答える