这是我在Perl脚本中尝试做的事情:
$data="";
sub loadXMLConfig()
{
$filename="somexml.xml"
$data = $xml->XMLin($filename);
}
sub GetVariable()
{
($FriendlyName) = @_;
switch($FriendlyName)
{
case "My Friendly Name" {print $data->{my_xml_tag_name}}
....
....
....
}
}
问题是我使用Perl只是因为我正在读取XML文件,但我需要通过shell脚本获取这些变量.所以,这是我正在使用的:
$ perl -e 'require "scrpt.pl"; loadConfigFile(); GetVariable("My Variable")'
Run Code Online (Sandbox Code Playgroud)
这完全按预期工作,但每次获取变量时我都需要读取XML文件.有没有办法可以"保留" $datashell调用?我的想法是我只读了一次XML文件.如果不是,有没有更简单的方法可以做到这一点?这些是我无法改变的:
当我需要一些由Perl检索的信息时,在shell脚本中,我通过Perl生成shell脚本并通过eval以下方式设置环境变量:
myscript
#!/bin/bash
BINDIR=`dirname $0`
CONFIG=$BINDIR/config.xml
eval `$BINDIR/readcfg $CONFIG`
echo Running on the $planet near the $star.
Run Code Online (Sandbox Code Playgroud)
readcfg
#!/usr/bin/perl
use XML::Simple;
my $xml = XMLin('config.xml', VarAttr => 'name', ContentKey => '-content');
while (my ($k, $v) = each %{$xml->{param}}) {
$v =~ s/'/'"'"'/g;
$v = "'$v'";
print "export $k=$v\n";
}
Run Code Online (Sandbox Code Playgroud)
config.xml
<config>
<param name="star">Sun</param>
<param name="planet">Earth</param>
</config>
Run Code Online (Sandbox Code Playgroud)