perl有没有类似shell的用法?

lovebelobe 2013-02-21 06:43:57
shell中有一种用法是可以取得一个文件里的数据。具体如下:

check.conf的内容:
CHECK_NUM = 38

shell:
. /usr/app/check.conf

$CHECK_NUM就可以直接取得38,在perl里面有没有同样的用法呢?
...全文
163 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovebelobe 2013-02-22
  • 打赏
  • 举报
回复
引用 12 楼 bugs2k 的回复:
Perl code?12345678910111213141516use strict;use warnings; my $cfg_file = 'check.conf';my $in;my $out; open my $fd, '<', $cfg_file or die $!;while (<$fd>) { if (/CHECK_NUM\s*=\s*(\d+)/)……
虽然还是不清楚是怎么回事,但最后用 $data =~ s/[\n\r]+$//; 解决了,谢谢你的热心回答!
lovebelobe 2013-02-22
  • 打赏
  • 举报
回复
引用 12 楼 bugs2k 的回复:
Perl code?12345678910111213141516use strict;use warnings; my $cfg_file = 'check.conf';my $in;my $out; open my $fd, '<', $cfg_file or die $!;while (<$fd>) { if (/CHECK_NUM\s*=\s*(\d+)/)……
不知道怎么回事_output会把38给覆盖掉,_output不加在38的后面,而是从38的头文字开始输出…… 怎么会这样……昏过去!
bugs2k 2013-02-21
  • 打赏
  • 举报
回复
use strict;
use warnings;

my $cfg_file = 'check.conf';
my $in;
my $out;

open my $fd, '<', $cfg_file or die $!;
while (<$fd>) {
    if (/CHECK_NUM\s*=\s*(\d+)/) {
        $in = $1;
    }
}
close $fd;
$out = $in . '_output';
print "$in\n$out\n";
lovebelobe 2013-02-21
  • 打赏
  • 举报
回复
引用 10 楼 bugs2k 的回复:
$line_cfg 中包含了换行符,用 chomp 去掉
把$out = $in.'_output'; 改成 $out = chomp($in).'_output'; 后 $out的处理结果变成"1_output" 好奇怪啊……
bugs2k 2013-02-21
  • 打赏
  • 举报
回复
$line_cfg 中包含了换行符,用 chomp 去掉
lovebelobe 2013-02-21
  • 打赏
  • 举报
回复
引用 8 楼 lovebelobe 的回复:
引用 7 楼 bugs2k 的回复:把代码贴上来 不如帮我解决另外一个问题吧,如果那个问题解决的话,这个问题也就不需要了。 我想把变量和一个固定字符连接起来,但print出来的结果总是在变量和固定字符里换行。 代码: #!usr/bin/perl -w use strict; use warning; my $cfg_file = '//usr/ch……
我想要的输出结果是: 38 38_output
lovebelobe 2013-02-21
  • 打赏
  • 举报
回复
引用 7 楼 bugs2k 的回复:
把代码贴上来
不如帮我解决另外一个问题吧,如果那个问题解决的话,这个问题也就不需要了。 我想把变量和一个固定字符连接起来,但print出来的结果总是在变量和固定字符里换行。 代码: #!usr/bin/perl -w use strict; use warning; my $cfg_file = '//usr/check.conf'; my $in; my $out; open ( my $cfh, "<",$cfg_file) or die "Cannot open $cfg_file:$!"; while( my $line_cfg = readline $cfh){ if($line_cfg =~ /CHECK_NUM=/){ $in = substr($line_cfg,20); } } $out = $in.'_output'; print $in; print $out,"\n"; close $cfh; 输出结果是: 38 38 _output
bugs2k 2013-02-21
  • 打赏
  • 举报
回复
把代码贴上来
lovebelobe 2013-02-21
  • 打赏
  • 举报
回复
引用 5 楼 bugs2k 的回复:
不要启用 strict 及 warnings
报错Name "main::CHECK_NUM" used only once : possible type as test.pl Use of uninitialized value in print as test.pl line13,<$fd> line1. 注释掉strict 及 warnings了。
bugs2k 2013-02-21
  • 打赏
  • 举报
回复
不要启用 strict 及 warnings
lovebelobe 2013-02-21
  • 打赏
  • 举报
回复
引用 3 楼 bugs2k 的回复:
类似于这个样子么? Perl code?1234567open my $fd, '<', '/usr/app/check.conf' or die $!;while (<$fd>) { s/^\s*(\w+)/\$$1/; eval; print $CHECK_NUM, "\n";}close $fd;
报错Global symbol "$CHECK_NUM" requires explicit package name at test.pl 是因为不能识别$CHECK_NUM吗?
bugs2k 2013-02-21
  • 打赏
  • 举报
回复
类似于这个样子么?
open my $fd, '<', '/usr/app/check.conf' or die $!;
while (<$fd>) {
    s/^\s*(\w+)/\$$1/;
    eval;
    print $CHECK_NUM, "\n";
}
close $fd;
lovebelobe 2013-02-21
  • 打赏
  • 举报
回复
引用 1 楼 bugs2k 的回复:
Perl code?12345678while (<DATA>) { s/^\s*(\w+)/\$$1/; eval; print $CHECK_NUM, "\n";} __DATA__ CHECK_NUM = 38
文件check.conf怎么引用啊?抱歉我是菜鸟!可不可以写全一点我能看懂。
bugs2k 2013-02-21
  • 打赏
  • 举报
回复
while (<DATA>) {
    s/^\s*(\w+)/\$$1/;
    eval;
    print $CHECK_NUM, "\n";
}

__DATA__
 CHECK_NUM = 38

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧