目前我正在使用
system("echo $panel_login $panel_password $root_name $root_pass $port $panel_type >> /home/shared/ftp");
使用Perl做同样事情的最简单方法是什么? IE:一个单行。
答案 0 :(得分:13)
为什么需要一行?你没有按线付款,是吗?这可能过于冗长,但总共需要两分钟才能输出。
#!/usr/bin/env perl
use strict;
use warnings;
my @values = qw/user secret-password ftp-address/;
open my $fh, '>>', 'ftp-stuff' # Three argument form of open; lexical filehandle
or die "Can't open [ftp-stuff]: $!"; # Always check that the open call worked
print $fh "@values\n"; # Quote the array and you get spaces between items for free
close $fh or die "Can't close [ftp-stuff]: $!";
答案 1 :(得分:8)
您可能会发现IO::All有帮助:
use IO::All;
#stuff happens to set the variables
io("/home/shared/ftp")->write("$panel_login $panel_password $root_name $root_pass $port $panel_type");
答案 2 :(得分:5)
您可能想要使用简单的File :: Slurp模块:
use File::Slurp;
append_file("/home/shared/ftp",
"$panel_login $panel_password $root_name $root_pass ".
"$port $panel_type\n");
它不是核心模块,所以你必须安装它。
答案 3 :(得分:4)
http://perldoc.perl.org/functions/open.html
在您的情况下,您必须:
#21st century perl.
my $handle;
open ($handle,'>>','/home/shared/ftp') or die("Cant open /home/shared/ftp");
print $handle "$panel_login $panel_password $root_name $root_pass $port $panel_type";
close ($handle) or die ("Unable to close /home/shared/ftp");
或者,您可以使用autodie pragma(正如@Chas Owens在评论中建议的那样)。 这样,不需要使用任何检查(或死(...))部分。
希望这次能够做到正确。如果是这样,将删除此警告。
使用打印(尽管不是一个衬垫)。只需打开您的文件并获取处理。
open (MYFILE,'>>/home/shared/ftp');
print MYFILE "$panel_login $panel_password $root_name $root_pass $port $panel_type";
close (MYFILE);
http://perl.about.com/od/perltutorials/a/readwritefiles_2.htm
答案 4 :(得分:4)
(open my $FH, ">", "${filename}" and print $FH "Hello World" and close $FH)
or die ("Couldn't output to file: ${filename}: $!\n");
当然,在单行中进行正确的错误检查是不可能的...... 应该的写法略有不同:
open my $FH, ">", "${filename}" or die("Can't open file: ${filename}: $!\n");
print $FH "Hello World";
close $FH;
答案 5 :(得分:0)
对于像这样的高级单行程序,你也可以使用来自Psh的psh命令,这是一个简单的纯Perl shell。
psh -c '{my $var = "something"; print $var} >/tmp/out.txt'
答案 6 :(得分:0)
我使用FileHandle。来自POD:
use FileHandle;
$fh = new FileHandle ">> FOO"; # modified slightly from the POD, to append
if (defined $fh) {
print $fh "bar\n";
$fh->close;
}
如果你想要更接近“单线”的东西,你可以这样做:
use FileHandle;
my $fh = FileHandle->new( '>> FOO' ) || die $!;
$fh->print( "bar\n" );
## $fh closes when it goes out of scope
答案 7 :(得分:0)
你可以像这样做一行:
print "$panel_login $panel_password $root_name $root_pass $port $panel_type" >> io('/home/shared/ftp');
您只需要将IO :: All模块添加到您的代码中,如下所示:
use IO::All;
答案 8 :(得分:-1)
关于使用perl编辑文件的一些好读物: