-1

到目前为止,在 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循环来读取文件吗?如果是这样,我如何将它嵌入到我已经打开的文件句柄中?有人可以告诉我一个很好的技术。

4

3 回答 3

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";
于 2013-09-17T17:08:16.740 回答
0

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

open INPUT, "users.lst" or die $!;
while (<INPUT>) {
    chomp;
    push @users, $_;
}
close INPUT;
$user = "USERS=" . join(",", @users);
于 2013-09-17T17:05:06.637 回答
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);

并像您已经拥有的那样打开并写入文件。

于 2013-09-17T17:05:38.233 回答