在perl脚本中使用config/properties文件中的变量

在perl脚本中使用config/properties文件中的变量,perl,configuration-files,cpan,Perl,Configuration Files,Cpan,如果我有一个与perl脚本分离的可配置变量页面,如何在其中使用它们 假设文件中有这些变量 database.properties: database = "dbi:Oracle:host=host-321;sid=XE;port=1337","User","Passwd" table1 = CHANNEL table2 = NODE …我的perl脚本的以下部分需要它们: my $dbh = DBI->connect($database); open RO

如果我有一个与perl脚本分离的可配置变量页面,如何在其中使用它们

假设文件中有这些变量

database.properties:

    database = "dbi:Oracle:host=host-321;sid=XE;port=1337","User","Passwd"

    table1 = CHANNEL

    table2 = NODE
…我的perl脚本的以下部分需要它们:

my $dbh = DBI->connect($database);

open ROW,">","./report/archive/rprt-$now/row_counts.txt" or die "Unable to create file: $!";
    my $chanRows = $dbh->selectrow_array("SELECT COUNT(*) FROM $table1");
    my $nodeElemsRows = $dbh->selectrow_array("SELECT COUNT(*) FROM $table2 WHERE NODE_TYPE > 1");
    my $nodeDeviceRows = $dbh->selectrow_array("SELECT COUNT(*) FROM $table2 WHERE NODE_TYPE = 1");
    print ROW "Channels: $chanRows\n";
    print ROW "Network Elements: $nodeElemsRows\n";
    print ROW "Devices: $nodeDeviceRows";
close ROW;
显然,简单地把$database、$table1和$table2放在那里是没有任何好处的,那么正确的方法是什么呢?提前谢谢。

您可以使用。您的配置文件可能如下所示:

[databaseproperties]

    database = "dbi:Oracle:host=host-321;sid=XE;port=1337","User","Passwd"

    table1 = CHANNEL

    table2 = NODE
你的剧本是这样的:

#!/usr/bin/env perl
use strict;
use warnings;
use Config::Tiny;
my $config = Config::Tiny->new;
$config = Config::Tiny->read('myconfig');
my $database = $config->{databaseproperties}->{database};
print "DATABASE = $database\n";
my $table1 = $config->{databaseproperties}->{table1};
print "TABLE-1  = $table1\n";
my $table2 = $config->{databaseproperties}->{table2};
print "TABLE-2  = $table2\n";

您检查过了吗?还要注意,除非您确实确定这些文件中的文本是安全的,否则插入SQL查询字符串会使您容易受到攻击。