到目前为止,在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循环来读取文件?如果是这样,我如何将其嵌入我已经打开的文件句柄中?有人能告诉我一个好的技巧。
答案 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);
然后打开并写入您已有的文件。