arquivo de origem com chaves e valores e usá-lo no código perl

1

Eu tenho um arquivo como este salvo como /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

Eu quero usar a fonte de forma que no meu código perl eu possa usar os nomes exatos das chaves e possa fazer algo assim:

print $LDT_HWADDR;
print $LDT_OS_ID;
print $RUN_UPDATES;

A saída desejada seria:

00:00:00:00:00:00
24
true
    
por Asaf Magen 14.06.2015 / 15:01

1 resposta

1

Use apenas um hash:

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

Saída:

LDT_HWADDR:00:00:00:00:00:00
LDT_OS_ID:24
RUN_UPDATES:true

Como alternativa, use $$var . Note, no entanto, que essas coisas são muito raramente, ou nunca, uma boa ideia e muitas vezes levam a complicações (por exemplo, veja o link fornecido por @Sobrique nos comentários). A abordagem acima é muito mais segura.

#!/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";
    
por 14.06.2015 / 15:16

Tags