0

別のファイルからの入力を使用して、ファイルに出力しようとしています。キーボード入力なし。

私は正しい軌道に乗っていることを知っています。私の構文はほんの少しずれています。

基本的に、ファイル「boot.log」からレコードを取得し、パターン マッチングを使用して特定のレコードを選択し、それらを「bootlog.out」という名前のファイルに出力します。パターン マッチングの部分にはまだ到達していません。これが私が持っているものです...

open (BOOTLOG, "boot.log") || die "Can't open file named boot.log: $!";

while ($_ = <BOOTLOG>)
{
print $_;
}

open (LOGOUT, ">bootlog.out") || die "Can't create file named bootlog.out: $!\n";

close (LOGOUT) || die "Can't close file named bootlog.out: $!\n";

close (BOOTLOG) || die "Can't close the file named boot.log: $!";

boot.log の内容を bootlog.out に出力するにはどうすればよいですか?

編集1

これは、入力を取得して2番目のファイルに出力するようです。構文は正しいですか?

open (BOOTLOG, "boot.log") || die "Can't open file named boot.log: $!";

open (LOGOUT, ">bootlog.txt") || die "Can't create file named bootlog.out: $!\n";

while ($_ = <BOOTLOG>)
{
print $_;
print LOGOUT $_;
}

close (LOGOUT) || die "Can't close file named bootlog.txt: $!\n";

close (BOOTLOG) || die "Can't close the file named boot.log: $!";
4

2 に答える 2

2

LOGOUTと一緒に出力ファイルハンドルを使用するだけprintです。また、実際に出力する前に出力ファイルハンドルを開く必要があります。

open (BOOTLOG, "boot.log") || die "Can't open file named boot.log: $!";
open (LOGOUT, ">bootlog.out") || die "Can't create file named bootlog.out: $!\n";
while (<BOOTLOG>)
{
    print LOGOUT $_;
}  
close (LOGOUT);
close (BOOTLOG);

注 :ベアワード ファイル ハンドルを使用しないことをお勧めします。上記のコードを次のように書き直すことをお勧めします。

use strict;
use warnings;    

open my $fh_boot_log, '<', 'boot.log' or die "Can't open file 'boot.log': $!";
open my $fh_log_out, '>', 'bootlog.out' or die "Can't create file 'bootlog.out': $!\n";
while (<$fh_boot_log>)
{
    print $fh_log_out $_;
}  
close $fh_log_out;
close $fh_boot_log;
于 2013-10-29T17:52:12.167 に答える
2

魔法を使った別の解決策<diamond operator>

#!/usr/bin/env perl

use strict; use warnings;

while (<>) {
    print;
}

での使用法:

$ perl script.pl < input.txt > output.txt
于 2013-10-29T18:27:26.037 に答える