Perl

帶有鍵和值的源文件,並在 perl 程式碼中使用它

  • June 14, 2015

我有一個這樣的文件保存為/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

只需使用雜湊:

#!/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";

引用自:https://unix.stackexchange.com/questions/209569