最近在写一个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. checkstyle配置文件说明

    属性说明 basedir代码所在的位置 AbstractClassNameformat: 定义抽象类的命名规则 PackageNameformat: 定义包名的命名规则 TypeNameformat: ...

  2. 【转】asp.net mvc 页面跳转

    1.使用传统的Response.Redirect例如string url = "/account/create";Response.Redirect(url); 1.Server. ...

  3. recording just for inquiry in the future

    auditd审计 相关命令有: auditd, auditctl, ausearch, aureport 相关文件: /etc/audit/auditd.conf, /etc/audit/audit. ...

  4. jquery eval解析JSON中的注意点介绍

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式:使用eval()函数.使用Function对象来进行返回解析,下面有个示例,感兴趣的朋友可以参考下   在JS中将JSON的字符串解析 ...

  5. 你真的懂了R中的stem函数是如何绘制茎叶图的么?

    本文原创,转载请注明出处,本人Q1273314690(交流学习)   哭晕 你真的学会了stem()函数了吗? stem()函数的使用方法是: stem(x, scale=1,width=80, at ...

  6. 【转】Eclipse里项目名有红叉,但是展开后里面又没有红叉叉

    Eclipse里项目名有红叉,但是下面的每一个文件都没有红叉 有三种可能: 1:classpath有问题 2:编译级别有问题 3:jar包有问题,我碰过从maven上获取了问题jar包,工程里提示能找 ...

  7. UI第四节——UIImageView详解

    - (void)viewDidLoad { // super调用是必须的 [super viewDidLoad]; UIImage *image = [UIImage imageNamed:@&quo ...

  8. java依赖注入

    接口的作用 1.在spide中创建一个私有接口 private Downloadable downlaodable 覆盖set get 方法 创建一个方法  Public Page down load ...

  9. Mac Pro 入门、遇到的问题、个性化设置 汇总

    入门资料 入门一:Mac 基本用法 入门二:Mac 使用VMware Fusion虚拟机 入门三:Mac 使用brew安装软件 问题汇总 [问题1]如何复制文本? 一只手指头按下,另外一只手指头滑动选 ...

  10. VS2013 Community配置OpenCV3.0.0

    配置环境:32位win7系统+VS2013 Community版本 1.首先从OpenCV官网上下载最新版本的OpenCV for Windows. 2.直接双击打开下载得到的opencv-3.0.0 ...