Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用perl代码打印文件,但通过cmd运行_Windows_Perl_Cmd_Cygwin - Fatal编程技术网

Windows 使用perl代码打印文件,但通过cmd运行

Windows 使用perl代码打印文件,但通过cmd运行,windows,perl,cmd,cygwin,Windows,Perl,Cmd,Cygwin,我正在尝试使用以下代码在一个文件中打印文本: test.pl 通过cygwin运行时,我可以将其打印到文件中。但当使用下面的命令通过cmd运行同一个文件时,它会在控制台上打印“Printed”,但文件不会用“Test”文本写入 C:\Users\TD>C:\cygwin64\bin\perl.exe /home/TD/GMAT/test.pl Printed C:\Users\TD> 基本上我只是测试功能,稍后我将运行系统命令从数据库中进行备份。我正试图通过任务调度程序运行这个cm

我正在尝试使用以下代码在一个文件中打印文本: test.pl

通过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:\cygwin64\bin\perl.exe/home/TD/GMAT/test.pl

此命令在运行脚本后关闭窗口,我无法检查cmd控制台的输出,而是在cygwin控制台中打印文件


请告诉我是否有任何其他方法可以通过任务调度器自动化运行perl脚本的过程

您必须始终
使用strict
使用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";

如果您运行该命令,则消息将告诉您出错的原因

我看到您将自己命名为juststart,大概是为了预防批评。但是你需要在你的代码中有更多的空白,因为它将帮助你请求帮助的其他人阅读你所写的内容,而且当你明天再次面对相同的字符屏幕时,它对你来说也会更清晰
T
对于任何东西都不是一个好名字,可能只是一个时间变量,而
$i
通常是一个数组索引,但肯定不是一个文件名。有趣的是,您打印的文本是正确的英语,如
Test
Printed
!你应该让你的程序同样可读。哦,我认为你应该把你的名字改成现实的名字,比如
非常好的
,否则你只是在隐藏,永远不会增长。@Borodin谢谢你的评论,我已经更改了代码使它更可读。以我的名义,我仍在学习(从我的名声可以看出),这不是对批评的辩护。我接受所有批评,没有任何争论。显然,随着我学习的越来越多,我会改变我的名字。谢谢你推荐的名字
非常好
。哈哈。。我不太擅长使用这个名字进行编码。:)谢谢@Borodin,即使在更新代码之后,文件中也没有打印任何内容,我也无法在cmd控制台上看到任何消息
C:\Users\TD>C:\cygwin64\bin\perl.exe C:\cygwin64\home\TD\GMAT\test.pl Printed
通过cygwin控制台运行相同的脚本,文件中打印了“test”文本。
#!/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";