关于用perl调用unix shell命令的问题

关于用perl调用unix shell命令的问题

各位大侠,我想在perl 中调用shell 命令实现,通过从一个配置文件中读取对应值来给变量赋值。

#!/usr/bin/perl
use Shell;

my $kk1=`awk -F= '{if ($1~/Hostname/) print $2 }'  /home/file.cfg`;
print "$kk1\n";

执行时报错,可能是awk语句里面的特殊符号倒的乱。麻烦各位帮我看一下。谢谢!
----------file.cfg中的内容----
Hostname=AAA
ip=128.0.1.191
#!/usr/bin/perl -w
use strict;
my $a=`awk -F"=" '{if(\$1~/Hostname/)print \$2}' a`;
print "$a";
my $Hosts=`awk -F= '{if (\$1\~/Hosts/) print \$2 }' $CFG_ENV/env.cfg`;
my $Ds_User=`awk -F= '{if (\$1\~/Ds_User/) print \$2 }' $CFG_ENV/env.cfg`;

我有两个变量是调用shell 来获取的,但是把这两个变量放在一起print就会有回车符出现,请问大侠帮忙分析一下是什么原因?最初怀疑是换行符,我用chomp也不行。
print "$Hosts $Ds_User"; -->下面是结果
localhost
   AA

-----env.cfg的内容------
Hosts=localhost
Ds_User=AA
Ds_pwd=BB
大侠还在么?版主呢?请指教一下,谢谢!
\r的问题...你的file内是存\r\n..chomp只能去掉\n
所以要用$a=~s/[\r\n]//;
清掉..
代码如下,实现的功能和env.cfg文件的内容点楼顶,

my $Hosts=`awk -F= '{if (\$1\~/Hosts/) print \$2 }' env.cfg`;
my $Ds_User=`awk -F= '{if (\$1\~/Ds_User/) print \$2 }' env.cfg`;
my $Ds_pwd=`awk -F= '{if (\$1\~/Ds_pwd/) print \$2 }' env.cfg`;

# --UDATE Variable
$Hosts=~s/[\r\n]//;   --->按照大侠的思路去\r的操作
#$Ds_User =~ s/\n//g;
$Ds_User =~s/[\r\n]//;
$Ds_pwd =~s/[\r\n]//;

print "$Hosts $Ds_User $Ds_pwd";

-----------------------------------返回结果-----------------------------------
localhost
AA
BB
-----------问题描述-------
我把这个print 定向到一个文本里,发现没有了unix的回车换行符,但是变量还是做了硬回车,不知道是怎么回事,请教大侠指点迷津!!
后来我又根据大侠的思路把这几个变量放到一个数组里面,再=~s/[\r\n]//替换,print后发现就可以了,代码如下,但我始终觉得我用的方法比较笨,不知道高手们有没更好的办法来实现我这个需求,不用调用shell,直接用perl来从文件里提取需要的内容???
$Hosts=~s/[\r\n]//;
$Ds_User =~s/[\r\n]//;
$Ds_pwd =~s/[\r\n]//;

my @jj=($Ds_User,$Ds_pwd,$Hosts);
$jj[0]=~s/[\r\n]//;
$jj[1]=~s/[\r\n]//;
$jj[2]=~s/[\r\n]//;
#@jj=~s/[\r\n]//;
print "$jj[0] $jj[1] $jj[2]";
---------  结果返回 -----------
localhost AA BB

都已经 Perl 了,读个配置文件还要 awk。
## ---
my $ENV_CONF=env.cfg';

open(FD,$ENV_CONF);
my @array=<FD>;
#$line=<FD>;
close(FD);

my ($host_tag,$Hosts)=split(/=/,$array[0]);
my ($user_tag,$Ds_User)=split(/=/,$array[1]);
my ($pwd_tag,$Ds_pwd)=split(/=/,$array[2]);

$Hosts=~s/[\r\n\r\n]//;
$Ds_User =~s/[\r\n\r\n]//;
$Ds_pwd =~s/[\r\n]//;
print "$Hosts $Ds_User $Ds_pwd";
------- 第一次去回车换行的结果 ----
localhost
AA
BB
my @Larry=($Hosts,$Ds_User,$Ds_pwd); ## 再去一次 \s \n

$Hosts=~s/[\r\n]//;
$Ds_User=~s/[\r\n]//;
$Ds_pwd=~s/[\r\n]//;

print "$Hosts $Ds_User $Ds_pwd";
-------再去一次回车换行的结果 ----
localhost AA BB

请问高人,我为什么要两次=~s/[\r\n]// 才能把变量的回力换行符彻底清除掉呢?