在perl中更正交互式流

时间:2012-06-18 06:25:04

标签: perl bash stdout out

我的perl脚本需要让用户输入密码才能下载一些文件:

print "Your password please: \n";
ReadMode('noecho');
$password = ReadLine(0);
$password =~ s/\n//;
ReadMode(0);

system("wget --user=user --password=\"$password\" http://some.server/data.xml");
do_something();

如果我用$> ./script.pl调用脚本,一切正常。但是,如果我想将输出通过$> ./script.pl > text.txt传输到文件,则密码问题也会通过管道传输到文件中,并且ReadLine不再起作用。

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

将提示打印到STDERR

print STDERR "Your password please: ";

答案 1 :(得分:0)

直接从键盘读取密码所带来的安全性收益因shell wget而无效,在其环境中,系统上的每个用户都可以清楚地看到密码。如果安全性无关紧要,您可以将程序重写为take command-line parameters以获取用户/密码。