使用Perl写入文件最简单的方法是什么?

时间:2009-06-29 00:57:26

标签: perl

目前我正在使用

system("echo $panel_login $panel_password $root_name $root_pass $port $panel_type >> /home/shared/ftp");

使用Perl做同样事情的最简单方法是什么? IE:一个单行。

9 个答案:

答案 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编辑文件的一些好读物:

FMTYEWTK About Mass Edits In Perl