filehandle - 不会写入文件

时间:2011-03-22 18:01:25

标签: perl file-io

我无法使用FILEHANDLE获取下面的脚本来写入文件data.txt。这两个文件都在同一个文件夹中,所以这不是问题。自从我开始使用Perl以来,我注意到要运行脚本,我必须使用完整路径:c:\ programs \ scriptname.pl以及输入文件的相同方法。我认为这可能是问题,并在下面尝试了这种语法,但这也不起作用......

open(WRITE, ">c:\programs\data.txt") || die "Unable to open file data.txt: $!";

这是我的脚本。我检查了语法,直到它让我发疯并且看不到问题。任何帮助将不胜感激!。我也很困惑,为什么模具功能还没有开始。

#!c:\strawberry\perl\bin\perl.exe

#strict
#diagnostics
#warnings

#obtain info in variables to be written to data.txt
print("What is your name?");
$name = <STDIN>;
print("How old are you?");
$age = <STDIN>;
print("What is your email address?");
$email = <STDIN>;

#data.txt is in the same file as this file.
open(WRITE, ">data.txt") || die "Unable to open file data.txt: $!";

#print information to data.txt
print WRITE "Hi, $name, you are \s $age and your email is \s $email";

#close the connection
close(WRITE);

我如何解决这个问题

我在c:驱动器上安装了Strawberry Perl perl.exe,通过安装程序安装了一个文件夹,同时我的脚本也在c上,这意味着我无法红色/写入文件(定向或使用函数,即开放的函数,我总是必须使用完整路径来启动脚本。我建议将解释器安装到原来的位置并将脚本文件移动到桌面后解决了这个问题(将OS命令保留在脚本的第一行,因为解释器仍然位于最初的同一位置)。现在我只需单击即可运行脚本并读/写并通过CMD提示附加到文件并轻松使用Perl函数。

4 个答案:

答案 0 :(得分:2)

反斜杠在双引号字符串中具有特殊含义。尝试逃避反斜杠。

open(WRITE, ">c:\\programs\\data.txt") || die ...;

或者,由于您没有插入变量,请切换到单引号。

open(WRITE, '>c:\programs\data.txt') || die ...;

使用open-lexical文件句柄的三参数版本也是值得的。

open(my $write_fh, '>', 'c:\programs\data.txt') || die ...;

答案 1 :(得分:1)

您必须使用“/”来确保可移植性,因此:open(WRITE, ">c:/programs/data.txt") 注意:我假设c:/programs文件夹存在

答案 2 :(得分:1)

您可以尝试FindBin

use strict;
use warnings;
use autodie; # open will now die on failure

use FindBin;
use File::Spec::Functions 'catfile';
my $filename = catfile $FindBin::Bin, 'data.txt';

#obtain info in variables to be written to data.txt
print("What is your name?"); my $name = <STDIN>;
print("How old are you?"); my $age = <STDIN>;
print("What is your email address?"); my $email = <STDIN>;

{
  open( my $fh, '>', $filename );
  print {$fh} "Hi, $name, you are $age, and your email is $email\n";
  close $fh;
}

答案 3 :(得分:1)

如果您在尝试打印到data.txt时遇到访问问题,可以将该行更改为:

print WRITE "Hi, $name, you are \s $age and your email is \s $email" || die $!;

获取更多信息。只读文件将导致此错误消息:

Unable to open file data.txt: Permission denied at perl.pl line 12, <STDIN> line 3.