我正在perl中编写一个脚本,我正在创建一个文件并从用户那里获取文件输入但是当我将该文件复制到其他位置时,文件正在复制,但它只是空的。我的代码是
# !/usr/bin/perl -w
for($i = 1;$i<5;$i++)
{
open(file1,"</u/man/fr$i.txt");
print "Enter text for file $i";
$txt = <STDIN>;
print file1 $txt;
open(file2,">/u/man/result/fr$i.txt");
while(<file1>)
{
print file2 $_;
}
close(file1);
close(file2);
}
fr1到fr4正在创建,但这些都是空的。就像我运行我的代码时,它要求输入我提供输入和代码运行没有错误但仍然文件是空的。请帮忙。 在第4行,我改变了&lt;到&gt;同样,我想创建新文件可能需要它,但它仍然无法正常工作
答案 0 :(得分:3)
您需要关闭写入的文件句柄才能从该文件中读取。
use warnings;
use strict;
use feature 'say';
for my $i (1..4)
{
my $file = "file_$i.txt";
open my $fh, '>', $file or die "Can't open $file: $!";
say $fh "Written to $file";
# Opening the same filehandle first *closes* it if already open
open $fh, '<', $file or die "Can't open $file: $!";
my $copy = "copy_$i.txt";
open my $fh_cp, '>', $copy or die "Can't open $copy: $!";
while (<$fh>) {
print $fh_cp $_;
}
close $fh_cp; # in case of early errors in later iterations
close $fh;
}
这会创建四个文件file_1.txt
等及其副本copy_1.txt
等。
请注意必须检查open
是否有效。
答案 1 :(得分:3)
您无法写入未写入的文件句柄。您无法从不能阅读的文件句柄中读取。永远不要忽略open的返回值。
# !/usr/bin/perl
use warnings; # Be warned about mistakes.
use strict; # Prohibit stupid things.
for my $i (1 .. 4) { # lexical variable, range
open my $FH1, '>', "/u/man/fr$i.txt" # 3 argument open, lexical filehandle, open for writing
or die "$i: $!"; # Checking the return value of open
print "Enter text for file $i: ";
my $txt = <STDIN>;
print {$FH1} $txt;
open my $FH2, '<', "/u/man/fr$i.txt" # Reopen for reading.
or die "$i: $!";
open my $FH3, '>', "/u/man/result/fr$i.txt" or die "$i: $!";
while (<$FH2>) {
print {$FH3} $_;
}
close $FH3;
}
答案 2 :(得分:0)
我使用filehandler1在写入模式下打开文件然后我再次使用相同的filehandler1以读取模式打开文件然后我打开了文件处理程序2 for destiantion所以它对我来说工作正常。
答案 3 :(得分:0)
system("cp myfile1.txt /somedir/myfile2.txt")
`cp myfile1.txt /somedir/myfile2.txt`