【问题标题】:Using variables from a config/properties file in a perl script在 perl 脚本中使用 config/properties 文件中的变量
【发布时间】:2012-06-27 13:25:05
【问题描述】:

如果我有一个与我的 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 像这样放在那里不会有任何好处,那么正确的方法是什么?提前致谢。

【问题讨论】:

  • 你检查过Config::File吗?
  • 还要注意,除非您真的确定这些文件中的文本是安全的,否则插入 SQL 查询字符串会使您容易受到攻击。 Learn from Bobby Tables.

标签: perl configuration-files cpan


【解决方案1】:

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

[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";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 2021-05-31
    • 2017-10-26
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多