我有一个这样的文件另存为/var/ldt/ldt.conf
:
LDT_HWADDR='00:00:00:00:00:00'
LDT_DISK='/dev/sda'
LDT_OS_ID='24'
LDT_VERBOSE=true
RUN_UPDATES=true
我想以一种方式获取它,在我的 Perl 代码中我可以使用确切的键名称,并且能够执行如下操作:
print $LDT_HWADDR;
print $LDT_OS_ID;
print $RUN_UPDATES;
期望的输出是:
00:00:00:00:00:00
24
true
答案1
只需使用哈希:
#!/usr/bin/perl -w
use strict;
open(my $fh, "<", "/var/ldt/ldt.conf") || die "Can't open file: $!\n";
my %vars;
while(<$fh>){
## remove trailing newlines
chomp;
## Split the line on =
my @F=split(/=/,$_,2);
## remove quotes
$F[1]=~s/^['"]//;
$F[1]=~s/['"]$//;
## Save the values in the hash
$vars{$F[0]}=$F[1];
}
print "LDT_HWADDR:$vars{LDT_HWADDR}\n";
print "LDT_OS_ID:$vars{LDT_OS_ID}\n";
print "RUN_UPDATES:$vars{RUN_UPDATES}\n";
输出:
LDT_HWADDR:00:00:00:00:00:00
LDT_OS_ID:24
RUN_UPDATES:true
或者,使用$$var
.但请注意,这样的事情很少(如果有的话)是一个好主意,而且经常会导致复杂化(例如,参见链接由@Sobrique 在评论中提供)。上面的方法要安全得多。
#!/usr/bin/perl
open(my $fh, "<", "/var/ldt/ldt.conf") || die "Can't open file: $!\n";
while(<$fh>){
## remove trailing newlines
chomp;
## Split the line on =
my @F=split(/=/,$_,2);
## remove quotes
$F[1]=~s/^['"]//;
$F[1]=~s/['"]$//;
## Set the variables
${$F[0]}=$F[1];
}
print "$LDT_HWADDR\n";
print "$LDT_OS_ID\n";
print "$RUN_UPDATES\n";