最近在写一个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. @SuppressWarnings的使用、作用、用法

    在java编译过程中会出现很多警告,有很多是安全的,但是每次编译有很多警告影响我们对error的过滤和修改,我们可以在代码中加上 @SuppressWarnings(“XXXX”) 来解决 例如:@S ...

  2. Emacs配置文件

    ;;tab and space;;when true,emacs use mixture of tab and space to archieve(setq-default indent-tabs-m ...

  3. Vue 入门指南 JS

    Vue 入门指南 章节导航 英文:http://vuejs.org/guide/index.html 介绍 vue.js 是用来构建web应用接口的一个库 技术上,Vue.js 重点集中在MVVM模式 ...

  4. Codeforces #270 D. Design Tutorial: Inverse the Problem

    http://codeforces.com/contest/472/problem/D D. Design Tutorial: Inverse the Problem time limit per t ...

  5. getRow()方法

    getRow :不是返回行数,而是返回当前是哪一行

  6. 如何去各型MCU的官网上下载正确的数据手册

    一.背景 感谢老司机左栋,虽然他一直很排斥这个名号 : ) ,可就技术上来说,还是当之无愧的. 弄了1年多单片机了,数据手册不是老员工或者头头给,就是从开发板资料拿.一直没有意识到,官网的东西才是最可 ...

  7. 微信封号浪潮再起 A货假代购还能在朋友圈泛滥多久?

    你的微信朋友圈是不是很活跃?是不是被很多所谓的名品所包围?没错,这些很多都是A货或假代购的伎俩.如果xmyanke的微信朋友圈出现这些东东,我就会直接屏蔽他的朋友圈权限.具体方法是:打开他的微信详细资 ...

  8. 01knockout应用开发之遍历简单数据$Index、$data

    在knockout环境下,如何遍历一个简单的数组?对于遍历对象组件的数组来说,很容易,直接foreach:对象名,然后进行属性的绑定即可,而如下数据[10,20,30]这种简单的数组,如何去遍历呢?在 ...

  9. linux 下 修改mysql账号密码

    1.root用户登录到mysql数据库代码示例:/usr/local/mysql/bin/mysql -u root -p (输入密码进入mysql)2.进入mysql,输入:代码示例:use mys ...

  10. thusc滚粗记

    day0 下午到了北京,雾霾还是那么大.. 到宾馆报个到,和哥哥吃了一波饭,去不起西郊...只能去五道口了... 晚上和wyz队长见面,wyz队长好帅啊...没带手机拍照真是个错误TAT day1 今 ...