Какой самый простой способ записи в файл с помощью Perl? - PullRequest
3 голосов
/ 29 июня 2009

В настоящее время я использую

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

Какой самый простой способ сделать то же самое с помощью Perl? IE: однострочник.

Ответы [ 9 ]

13 голосов
/ 29 июня 2009

Почему это должна быть одна строка? Вы не платите по линии, не так ли? Это, вероятно, слишком многословно, но для его набора потребовалось всего две минуты.

#!/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]: $!";
8 голосов
/ 29 июня 2009

Может оказаться полезным 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");
5 голосов
/ 29 июня 2009

Возможно, вы захотите использовать простой модуль File :: Slurp:

use File::Slurp;

append_file("/home/shared/ftp",
    "$panel_login $panel_password $root_name $root_pass ".
    "$port $panel_type\n");

Это не основной модуль, поэтому вам придется его установить.

4 голосов
/ 29 июня 2009
(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;
4 голосов
/ 29 июня 2009

РЕДАКТИРОВАТЬ (По популярным и редактируемым запросам)

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 предложил в комментариях). Таким образом, нет необходимости использовать чек (the или die (...)).

Надеюсь сделать все правильно в этот раз. Если это так, стереть это предупреждение.

Старый устаревший способ

Использовать печать (но не один лайнер). Просто откройте файл и получите ручку.

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

0 голосов
/ 19 июля 2015

Вы можете сделать однострочник как этот:

print "$panel_login $panel_password $root_name $root_pass $port $panel_type" >> io('/home/shared/ftp');

Вам нужно всего лишь добавить модуль IO :: All в ваш код, например:

use IO::All;
0 голосов
/ 29 июня 2009

Я использую 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
0 голосов
/ 29 июня 2009

Немного хорошего о редактировании файлов с помощью perl:

FMTYEWTK О массовых изменениях в Perl

0 голосов
/ 29 июня 2009

Для продвинутых однострочников, подобных этому, вы также можете использовать команду psh из Psh , простой чистой оболочки Perl.

 psh -c '{my $var = "something"; print $var} >/tmp/out.txt'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...