【问题标题】:How to read the properties file from perl script如何从 perl 脚本中读取属性文件
【发布时间】:2020-03-18 03:38:15
【问题描述】:

我已经编写了一个 perl 脚本,我将在其中连接到数据库,为此我使用了这个语句

my $dbh = DBI->connect(
    "DBI:mysql:database=test;host=localhost;mysql_socket=/var/run/mysqld/mysqld.sock",
    "root", "password", {'RaiseError' => 1});

由于我不希望任何信息被硬编码,我想使用属性文件,我可以在其中列出上述详细信息(例如,数据库、主机、mysql_socket)并从脚本中读取属性文件的详细信息。如何编写属性文件并从 perl 脚本中读取详细信息?

【问题讨论】:

标签: perl file


【解决方案1】:

有很多 CPAN 模块可以帮助您完成这项任务。 我喜欢Config::Simple,例如:

#!/usr/bin/perl
use strict;
use warnings;
use Config::Simple;
...
my $cfg = new Config::Simple('myapp.ini');
my $user = $cfg->param('database.user');
my $connection_str = $cfg->param('database.connection');
#...

还有文件myapp.ini:

[database]
connection="DBI:mysql:database=test;host=localhost;mysql_socket=/var/run/mysqld/mysqld.sock"
user=root
;...

您可以使用以下命令从终端/命令提示符安装模块:

cpan install Config::Simple

yum install perl-Config-Simple

【讨论】:

  • 无法通过包“Config::Simple”定位对象方法“new”(也许您忘记加载“Config::Simple”?)...我收到此错误跨度>
  • @Vishu — 所以加载 Config::Simple。 perldoc.perl.org/perlintro.html#Using-Perl-modules
  • @Quentin:我做了这个——使用 Config::Simple;
  • @Vishu 你安装了吗?
  • @TLP 我无法安装它。任何其他替代解决方案
【解决方案2】:

我在使用 perl-Config-Simple 时遇到问题,因此决定改用 Config::Properties。如果您也遇到同样的情况,那么您可以尝试以下方法。

确保您已安装 Config::Properties。以下是如何从命令行安装的几个示例,根据您使用的操作系统,您需要使用适当的选择:

  1. cpan Config::Properties
  2. cpan install Config::Properties
  3. yum install perl-Config-Properties

代码:

#!/usr/bin/perl
use strict;
use warnings;
use Config::Properties;

open my $cfh, '<', './foo.properties' or die "unable to open property file";
my $properties = Config::Properties->new();
$properties->load($cfh);
my $dbName = $properties->getProperty('database.name');
my $dbUser = $properties->getProperty('database.user');

属性文件:

database.name=somedb
database.user=someuser

一旦你有了变量中的值,把它们放到你的连接字符串中,你就可以开始了。

【讨论】:

    【解决方案3】:
    var temp;
    if($ENV eq "Prod"){
    #Prod Configurations
    temp = "Prod";
    }
    else{
    # Stage and Test Confgurations
    temp = "Stage";
    }
    

    【讨论】:

      【解决方案4】:

      我的实体解决方案,从属性文件中导出一个值:

      #!/usr/bin/perl
      use strict;
      use warnings;
      
      my $line;
      foreach $line (<STDIN>) {
        chomp($line);
        if(my $match = $line =~ /^(.*)=(.*)$/){
          my $key = $1;
          my $value = $2;
          if ($ARGV[0] eq $key) {
            print "$value\n";
            exit 0;
          }
        }
      }
      

      用法:perl script.pl mykey &lt; file.properties

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-19
        • 1970-01-01
        • 1970-01-01
        • 2021-10-23
        • 2016-06-18
        • 2012-03-04
        相关资源
        最近更新 更多