perl帮助基于一个或多个打开的文件创建输出文件

时间:2013-09-17 16:59:16

标签: perl file

到目前为止,在perl中,我知道如何打开文件进行编写:

open my $par_fh, '>', $par_file
  or die "$par_file: opening for write: $!";
print $par_fh <<PAR;
USERID=$creds
DIRECTORY=DMPDIR
USERS=$users
PAR
close $par_fh
  or die "$par_file: closing after write: $!";

我现在需要帮助的是我的变量$user在这个配置文件中我需要创建一个逗号单独的列表USERS=joe,mary,sue,john,在单独的文本文件中的最后一项上没有逗号:

users.lst :(此列表可以变长)

joe
mary
sue
john

我是否需要打开另一个while循环来读取文件?如果是这样,我如何将其嵌入我已经打开的文件句柄中?有人能告诉我一个好的技巧。

3 个答案:

答案 0 :(得分:1)

您可以将文件中的所有行读取为

之类的数组
my @users = <$user_fh>;

一次删除所有换行符:

chomp @users;

然后将所有项加入一个字符串,方法是用,分隔每个项目:

my $users = join ',', @users;

然后,我们可以照常插入;

print "USERS=$users\n";

另一个解决方案不会执行显式join,而是设置$"变量。这是在插入数组时放在数组元素之间的字符串:

my @array = 1..4;
print "[@array]\n"; #=> "[1 2 3 4]";

通常,这是一个空格,但我们可以将其设置为逗号:

local $" = ",";
print "USERS=@users\n";

答案 1 :(得分:0)

在PAR文件处理之前执行此操作。

open INPUT, "users.lst" or die $!;
while (<INPUT>) {
    chomp;
    push @users, $_;
}
close INPUT;
$user = "USERS=" . join(",", @users);

答案 2 :(得分:0)

打开文件进行阅读与编写文件非常相似:

open my $par_fh, '<', 'users.lst' or die 'unable to read users.lst';

然后您可以一次阅读一行:

my @users;
while (my $line = <$par_fh>) {
  chomp($line); # Remove newline
  push @users, $line;
}

或者一下子:

my @users = <$par_fh>
chomp(@users); # Remove newlines from all elements

关闭文件:

close($par_fh);

创建配置行:

my $output = 'USERS=' . join(',', @users);

然后打开并写入您已有的文件。