키와 값을 포함하고 이를 Perl 코드에서 사용하는 소스 파일

키와 값을 포함하고 이를 Perl 코드에서 사용하는 소스 파일

다음과 같은 파일이 저장되어 있습니다 /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";

관련 정보