在Windows 7中无法使用Perl写入文件

时间:2011-11-27 04:28:54

标签: perl file windows-7

我安装了Strawberry Perl并且已经使用了一段时间。但是,当我运行以下操作时,不会创建任何文件:

    open TEST, ">happy.txt";
    print TEST "contents";
    close TEST;

我无法在任何地方找到答案。我想知道这是否是允许的事情。我以管理员身份运行Perl命令提示符并使用绝对文件路径。我试过2台win7电脑。 任何人都可以在Windows 7上使用Perl创建文件吗?

两个指针(仅适用于win7) 由于窗口中的反斜杠,单引号应该用于路径?
- 似乎应该使用完整路径。

这有效:

open my $test, '>', 'D:\_docs\documents\perl\happy.txt' or die $!;
print $test "contents\n";
close $test or die $!;

注意:使用文件的路径。

3 个答案:

答案 0 :(得分:2)

您的代码没有任何内在错误会导致其失败。然而,它有什么问题,它不会测试'open'和'close'的返回值是否成功。如果不进行测试,您就不知道故障点在哪里。如果你测试失败,你可能会更好地了解错误。

我将提供代码的更新版本,用于测试失败,并在失败时输出错误消息。虽然我在这里,但我会使用一些“最佳实践”,例如间接词汇文件句柄和三arg打开:

open my $test, '>', 'happy.txt' or die $!;
print $test "contents\n";
close $test or die $!;

以这种方式运行代码将更明确地告诉您失败的原因(而不是默默地失败)。特殊变量'$!'包含实际的错误消息。

答案 1 :(得分:1)

我也找不到答案,没有答案。今天终于找到了这个solutoin,在我自己的64位Windows 7和ActiveState的32位Perl 5.16.1 build 1601的同一个基本问题上进行了两个小时的研究后,下面就是这样的东西,它为我清除了为什么正常发布的语法似乎不起作用,我已经尝试了几十种排列,但只在今天找到了一个适用于你的帖子和答案。

以下是我的Perl示例1

的输出消息

(这里我第一次没有零字节输出文件,并且还有一个内容来自我想要附加的内容。)

这很好。

这是我的Perl示例2的输出:

print()在testme3.pl第85行的关闭文件句柄OUTPUT上。 示例2:没有美元符号OUTPUT变量。

和以前一样,当print语句无法将输出打印到文件,并且它再次显示出显示到屏幕时,我收到了第一条错误消息。令我惊讶的是,我的打印声明试图在文件句柄已经关闭时进行打印!

在此之前,我没有来自操作系统的错误消息,也没有消息消息,因为我没有在我的print语句中放置一个die语句。下面是两个示例代码片段,它们以相同的顺序显示产生上述消息的内容。顺便说一下 - 剧本使用严格;并使用警告;

示例1:

print "\n\nThis worked fine";
my $OUTPUT;
open ($OUTPUT, '>hereOUTPUT.txt' ) or die "Can not create/open file. $!l";
print $OUTPUT "this is created OUTPUT";
close $OUTPUT;

示例2:在打印行上删除OUTPUT的$前缀,给出了上面有趣的新错误消息。

print "\n\nExample 2: with no dollar sign OUTPUT variable.";
my $OUTPUT;
open ($OUTPUT, '>>hereOUTPUT.txt' ) or die "Ex3a) Can not create/open file. $!l";
print OUTPUT "this is non dollar appended OUTPUT";
close $OUTPUT;

最后 - 这里是新的非零输出文件以及里面的内容: c:\ a000 \ myperl \ projects \ dir1> dir here *  驱动器C中的卷没有标签。  卷序列号为28B5-6AB9

目录c:\ a000 \ myperl \ projects \ dir1

12/15/2012 05:57 PM 22 hereOUTPUT.txt                2个文件22个字节                0 Dir(s)636,297,977,856字节免费

c:\ a000 \ myperl \ projects \ dir1>输入hereOUTPUT.txt 这是创建OUTPUT C:\ A000 \ myperl \项目\ DIR1>

答案 2 :(得分:0)

我在Window(Server 2012)上运行perl5.24(Strawberry)时发现了一个类似的异常现象,并且open ...; print $filehandle "something"; close ...;无效:

以下操作无效(在 open 中用 my 声明变量):

    open my $fh, '>', "c:/myfile";

以下DID工作(在 open 之前声明变量):

    my $fh;
    open $fh, '>', "c:/myfile";

也很奇怪,我注意到文件直到我close $fh才改变。 关闭文件句柄后,文件大小直接在浏览器中更改。

不知道是什么原因,但是希望此提示可以帮助您节省一些尝试/失败的时间