最近在写一个perl函数,把test case 放到配置文件里,读出来然后使用system运行。

我的本意是:

配置文件conf

ping -c $count $ip #在主程序中定义$ip和$count

从配置文件中拿出这句ping -c $count $ip 将其在system中执行,其中事先定义好$count=10 $ip="192.168.1.1";

#!/usr/bin/perl -w
use strict;
my $ip="192.168.1.1";
my $count=;
open(CONF,"conf") or die "$!\n";
my $ping=<CONF>;
close(CONF);
sub run_conf
{
my $conf=shift;
print "run $conf \n";
system($conf) or die "$!\n";
}
&run_conf($ping);

这样,按预期应该可以,会执行 ping -c 10 192.168.1.1 (linux下)

结果却是:

[root@localhost Desktop]# perl run.pl
run ping -c $count $ip

ping: bad number of packets to transmit.

不解,于是我直接把$ping 设置为

$ping="ping -c $count $ip";

不从conf读取

再次运行: 出现期望的

[root@localhost Desktop]# perl run.pl
run ping -c 10 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.

--- 192.168.1.1 ping statistics ---
10 packets transmitted, 0 received, 100% packet loss, time 19014ms

为毛从文件读取的内容,变量未被替换??? 我是这样猜想,perl为了安全起见,就把文件读取的内容,以q的方式或者说是' ',不使用转义,保持原型

就好比 print 'ping -c $count $ip' ,输出的话变量未经替换。

解决方案:

使用替换 $ping=~s/\$ip/$ip/; 将$ip替换为当前变量ip

$ping=~s/\$count/$count/;

#!/usr/bin/perl -w
use strict;
my $ip="192.168.1.1";
my $count=;
open(CONF,"conf") or die "$!\n";
my $ping=<CONF>;
close(CONF);
$ping=~s/\$count/$count/;
$ping=~s/\$ip/$ip/;
sub run_conf
{
my $conf=shift;
print "run $conf \n";
system($conf) or die "$!\n";
}
&run_conf($ping);

再次运行: 和预期一样

[root@localhost Desktop]# perl run.pl
run ping -c 10 192.168.1.1

PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.

--- 192.168.1.1 ping statistics ---
10 packets transmitted, 0 received, 100% packet loss, time 19004ms

perl 从文件里读出变量无法使用解决办法的更多相关文章

  1. Myeclipse中xml文件里自动提示消失解决办法

    IED Eclipse Java EE IDE for Web Developers:DTD 类型约束文件    1. Window->Preferences->XML->XML C ...

  2. [经验] 新版SkyIAR、Easy Image X在有些PE里不能运行的解决办法

    [经验] 新版SkyIAR.Easy Image X在有些PE里不能运行的解决办法 xxwl2008 发表于 2013-1-26 11:58:38 https://www.itsk.com/threa ...

  3. 树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法

    树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法 人穷,闲鱼淘了个二手的树莓派3 英国版,无奈咱也不会用,很无奈~ 安装教程百度到的差不多都可以,找个格式正常的一步一步 ...

  4. Office 2010 word无法创建工作文件 请检查临时环境变量 的解决办法

    Office 2010 word无法创建工作文件 请检查临时环境变量 的解决办法 http://hi.baidu.com/netshen/item/207fd935d452e0e9df2221c9 如 ...

  5. Mysql文件太大导入失败解决办法总结

    Mysql文件太大导入失败解决办法总结 在使用phpmyadmin导入数据库的时候可能会碰到由于数据库文件太大而无法导入的问题! 英文提示如下:File exceeds the maximum all ...

  6. 关于SSIS批量抽取Excel文件报0x80004005错误的解决办法

    原文:关于SSIS批量抽取Excel文件报0x80004005错误的解决办法 标题: Microsoft Visual Studio ------------------------------ Pa ...

  7. win7 Host文件修改后无效的解决办法

    win7 Host文件修改后无效的解决办法 正常情况下hosts文件随时修改随时生效,如果出现修改后不生效的情况,首先确定文件是ascii编码,以windows格式为换行符,然后依次采用如下方法  1 ...

  8. django在关闭debug后,admin界面 及静态文件无法加载的解决办法

    当debug为true的时候,ALLOWED_HOSTS是跳过不管用的.所以这里需要将debug关掉,令debug=false,ALLOWED_HOSTS=[ '*' ]表示所有的主机都可以访问 开启 ...

  9. Eclipse编辑jsp、js文件时卡死现象的解决办法汇总

    使用Eclipse编辑jsp.js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,具体那个方法起到作用,不太好讲.将所有用过的方法罗列如下: 1.取消验证 windo ...

随机推荐

  1. linux环境下给文件加密/解密的方法

      原文地址:linix环境下给文件加密/解密的方法 作者:oracunix 一. 利用 vim/vi 加密:优点:加密后,如果不知道密码,就看不到明文,包括root用户也看不了:缺点:很明显让别人知 ...

  2. php中关于 left join 的分页显示

    /* * 统计商机搜索总条数信息 * ftt * 2015-11-10 10:13:15 */ public function getBusinessCount($btype='',$buname=' ...

  3. Java五道输出易错题解析(避免小错误)

    收集了几个易错的或好玩的Java输出题,分享给大家,以后在编程学习中稍微注意下就OK了. 1. 看不见的空格? 下面的输出会正常吗? package basic; public class Integ ...

  4. 编译本地64位版本的hadoop-2.6.0

     官方提供的hadoop-2.x版本貌似都是32位的,在64位机子下使用可能会报错,最好使用官方提供的源码进行本地编译,编译成适合本地硬件环境的64位软件包. 关于native  Hadoop是使用J ...

  5. BSA基础数据维护

    平台 BSA基础数据维护 .扇区五个字段的内容 本来值为0,经过107上计算解析,得出正常的数值.然后106上报(200050),得到回复(200051). 查看回复数据,是否有错误.比如提示104 ...

  6. Mac 命令

    1.du 获取某个目录下各个文件和子目录占用多少空间,可以输入:du -sh *

  7. servlet之filter过滤器

    1.Servlet 过滤器有以下目的 在客户端的请求访问后端资源之前,拦截这些请求. 在服务器的响应发送回客户端之前,处理这些响应. 2.Filter接口 1.每一个过滤器都需直接或间接继承Filte ...

  8. centos安装

    转:http://www.cnblogs.com/Johness/archive/2012/12/03/2800126.html 在已经安装了Win7的系统下安装CentOS 注意:1.由于涉及到对硬 ...

  9. Android Fragment完全解析,关于碎片你所需知道的一切

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8881711 我们都知道,Android上的界面展示都是通过Activity实现的, ...

  10. mongodb的sql例子(简单版)

    插入数据 db.person.insert({"name":"zfx","age":21}) 查找所有数据 db.person.find() ...