superadmin.txt文件的格式为:
def
ghi
pqr
...etc
Perl将如何读取不同的用户? 能否从superadmin.txt识别不同的文本? 这是代码:
@prelist = ();
@prelist = `cat ../cgi-bin/superadmin.txt`;
foreach $prename (@prelist) {
$prename =~s/\n//g ;
$superadminstaff{$prename} = "Y";
答案 0 :(得分:4)
让我们重新编写代码,以便它a)编译,b)使用当前的最佳实践并且c)不会派生到cat
my @prelist = ();
my %superadminstaff = ();
open my $admin, '<', '../cgi-bin/superadmin.txt' or die "Can't open ../cgi-bin/superadmin.txt: $!\n";
chomp(@prelist = <$admin>);
@superadminstaff{@prelist} = ("Y") x @prelist;
因此,我们有两个变量@prelist
和%superadminstaff
,@prelist
将保存文件的每一行,而%superadminstaff
将最终键入文件的每个条目。
第3行尝试打开文件,如果无法打开,将停止脚本并打印出一条消息,说明问题所在。
第4行将文件读入@prelist
,并使用chomp
去除行尾。请注意,chomp
优先于chop
使用,因为文件的最后一行没有行尾。
第5行使用一些称为哈希切片的Perl魔术为%superadminstaff
中的每个元素在@prelist
中创建条目,然后使用x
运算符创建包含多达{{ 1}}元素,因为Y
中有元素,然后将@prelist
的这个列表分配给Y
中新创建的元素。
因此,在此代码末尾,您现在拥有%superadminstaff
,其中包含文件的每个条目。但是,不会保留文件中元素的顺序,并且文件中任何重复的条目都将减少为%superadminstaff
中的一个条目。