我正在嘗試編寫一個配置腳本。 對於每個客戶,它會詢問變量,然後編寫幾個文本文件。Perl:打開一個文件並在編輯後以不同的名稱保存
但是每個文本文件都需要多次使用,所以不能覆蓋它們。我更喜歡它從每個文件讀取,進行更改,然後將它們保存到$ name.originalname。
這可能嗎?
我正在嘗試編寫一個配置腳本。 對於每個客戶,它會詢問變量,然後編寫幾個文本文件。Perl:打開一個文件並在編輯後以不同的名稱保存
但是每個文本文件都需要多次使用,所以不能覆蓋它們。我更喜歡它從每個文件讀取,進行更改,然後將它們保存到$ name.originalname。
這可能嗎?
下面的代碼希望爲每個客戶找到一個配置模板,其中,例如,喬的模板是joe.originaljoe
和輸出寫入joe
:
foreach my $name (@customers) {
my $template = "$name.original$name";
open my $in, "<", $template or die "$0: open $template";
open my $out, ">", $name or die "$0: open $name";
# whatever processing you're doing goes here
my $output = process_template $in;
print $out $output or die "$0: print $out: $!";
close $in;
close $out or warn "$0: close $name";
}
我已經想通了一些東西:我忘了perl不像......「流」像其他腳本。我卡住了 $ customer_name =「placeholder」;那裏有 ,並且有一個名爲CPE_Option_A.txt.placeholder的文件。 所以我認爲問題是我必須確保它最後複製文件。 – Soop 2010-01-15 15:01:33
你想要類似Template Toolkit。您讓模板引擎打開模板,填充佔位符並保存結果。你不應該自己做任何魔法。
對於非常小的工作,我有時使用Text::Template。
假設你想在一個文件中讀取,進行更改行由行,然後寫入到另一個文件:
#!/usr/bin/perl
use strict;
use warnings;
# set $input_file and #output_file accordingly
# input file
open my $in_filehandle, '<', $input_file or die $!;
# output file
open my $out_filehandle, '>', $output_file or die $!;
# iterate through the input file one line at a time
while (<$in_filehandle>) {
# save this line and remove the newline
my $input_line = $_;
chomp $input_line;
# prepare the line to be written out
my $output_line = do_something($input_line);
# write to the output file
print $output_line . "\n";
}
close $in_filehandle;
close $out_filehandle;
這不是很清楚。你能告訴我們「多次使用」的意思嗎,你試過了什麼 – 2010-01-15 12:07:31
我還沒有試過任何東西,我正在計劃。 「多次使用」表示不同變量組的相同文件。 因此它需要保持不變。 – Soop 2010-01-15 12:44:28