我正在尝试使用以下代码在一个文件中打印文本: test.pl
#!/usr/bin/perl
use strict;
use warnings;
my $file="testing.txt";
open(INP_FILE,'>>',$file);
print INP_FILE "Test\n";
close(INP_FILE);
print "Text is Printed\n";
在通过cygwin运行时,我可以将其打印在文件中。但是当使用下面的命令通过cmd运行相同的文件时,它会在控制台上打印“Printed”,但文件不会使用“Test”文本写入。
C:\Users\TD>C:\cygwin64\bin\perl.exe /home/TD/GMAT/test.pl
Printed
C:\Users\TD>
基本上我只是测试功能,稍后我将运行系统命令从我的数据库中进行备份。我试图通过任务调度程序运行此cmd以进行自动备份。
在Windows任务计划程序中,我打开cmd.exe并将参数设为/c C:\cygwin64\bin\perl.exe /home/TD/GMAT/test.pl
此命令在运行脚本后关闭窗口,我无法检查cmd控制台的输出,但是在cygwin控制台中打印文件。
如果有任何其他方法可以通过任务计划程序自动执行运行perl脚本的过程,请告诉我
答案 0 :(得分:0)
您必须始终use strict
和use warnings 'all'
并检查每次open
来电的状态。最好使用词法文件句柄而不是全局句柄。当句柄超出范围时,词法文件句柄将隐式关闭。所以你的代码看起来应该是这样的
#!/usr/bin/perl
use strict;
use warnings 'all';
my $file = 'testing.txt';
{
open my $fh,'>>', $file or die qq{Unable to open "$file" for appending: $!};
print $fh "Test\n";
}
print "Printed\n";
如果你运行它,那么消息将告诉你它出错的原因
答案 1 :(得分:-2)
如果要覆盖该文件,这将起作用:
#!/usr/bin/perl
use strict;
use warnings;
my $filename = 'test.txt';
open my $fh, '<', $filename
or die "Cannot open '$filename' for appending: $!";
my @lines = sort grep { $_ } <$fh>;
close $fh or die "Cannot close '$filename': $!";
open $fh, '>', $filename
or die "Cannot open '$filename' for writing $!";
print $fh @lines;
close $fh or die "Cannot close '$filename': $!";