免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2305 | 回复: 9
打印 上一主题 下一主题

编程遇到一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-23 18:02 |只看该作者 |倒序浏览
我写的代码很简单,代码如下
#! /usr/bin/perl -w
$dnsipfile="dns.txt";
open (DNSIP,"$dnsipfile");
while($dnsip=<DNSIP>) {
        chomp $dnsip;
        print $dnsip,"\n";
        $ip="$dnsip";
        $statfile="$ip/dnsstat.txt";
        print $statfile,"\n";
}
close (DNSIP);
就是读一个文件,读出里面的ip,问题是如何将这个ip放入一个和其他的字符串合并为一个linux路径。试了几个方法都不行。
在我的机器上这个代码执行的结果如下:
[root@localhost sh]# ./test.pl
192.168.8.8
/dnsstat.txt
192.168.1.124
/dnsstat.txt4
文件dns.txt里的内容为
[root@localhost sh]# cat dns.txt
192.168.8.8
192.168.1.124
希望大家能看看问题在哪里。

论坛徽章:
0
2 [报告]
发表于 2009-08-23 18:37 |只看该作者
您要的是這樣嗎?
C:\>test.pl
192.168.8.8/dnsstat.txt
192.168.1.124/dnsstat.txt


C:\>more dns.txt
192.168.8.8
192.168.1.124


C:\>type test.pl
$DNSIP = "dns.txt";
open DNSIP;
while(<DNSIP>) {
        chomp;
        print;
        print '/dnsstat.txt',"\n";
}
close DNSIP;


$DNSIP = "dns.txt";
open DNSIP;
while(<DNSIP>) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chomp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print '/dnsstat.txt',"\n";
}
close DNSIP;


[ 本帖最后由 lokchungk 于 2009-8-23 18:40 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-08-23 20:25 |只看该作者
对是想要这样的一个路径,192.168.8.8/dnsstat.txt

论坛徽章:
0
4 [报告]
发表于 2009-08-23 20:34 |只看该作者
使用 $statfile = $statfile . '/dnsstat.txt';打印出来的路径字符串也不正确。请大家帮忙看看

论坛徽章:
0
5 [报告]
发表于 2009-08-23 20:58 |只看该作者
仔细看了一遍lz的代码,实在想不通出错的理由,于是本地尝试了一把,我这边完全正常:
C:>type a.pl
#! /usr/bin/perl -w

$dnsipfile="dns.txt";
open (DNSIP,"$dnsipfile");
while($dnsip=<DNSIP>) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chomp $dnsip;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print $dnsip,"n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ip="$dnsip";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$statfile="$ip/dnsstat.txt";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print $statfile,"n";
}
C:>type dns.txt
192.168.8.8
192.168.1.124
C:>a.pl
192.168.8.8
192.168.8.8/dnsstat.txt
192.168.1.124
192.168.1.124/dnsstat.txt

论坛徽章:
0
6 [报告]
发表于 2009-08-24 09:19 |只看该作者
还是不行。在服务器上执行的结果是
[root@localhost sh]# ./test.pl  
/dnsstat.txtn[root@localhost sh]# ./test.pl
/dnsstat.txtn[root@localhost sh]# ./test.pl

论坛徽章:
0
7 [报告]
发表于 2009-08-24 09:48 |只看该作者
没有道理的,我linux上也是正常的:
root@simulator:~# cat test.pl

#! /usr/bin/perl -w

$dnsipfile="dns.txt";
open (DNSIP,"$dnsipfile");
while($dnsip=<DNSIP>) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chomp $dnsip;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print $dnsip,"n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$ip="$dnsip";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$statfile="$ip/dnsstat.txt";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print $statfile,"n";
}
close (DNSIP);
root@simulator:~# cat dns.txt

192.168.8.8
192.168.1.124
root@simulator:~# ./test.pl

-bash: ./test.pl: Permission denied
root@simulator:~# perl test.pl

192.168.8.8
192.168.8.8/dnsstat.txt
192.168.1.124
192.168.1.124/dnsstat.txt

论坛徽章:
0
8 [报告]
发表于 2009-08-24 09:50 |只看该作者
原帖由 zhanglinbaby 于 2009-8-23 18:02 发表
我写的代码很简单,代码如下
#! /usr/bin/perl -w
$dnsipfile="dns.txt";
open (DNSIP,"$dnsipfile");
while($dnsip=) {
        chomp $dnsip;
        print $dnsip,"\n";
        $ip="$dnsip";
    ...


推测dns.txt每行是以\r\n结束
        chomp $dnsip;
        print $dnsip,"\n";
改为
        chomp $dnsip;
        $dnsip =~ s/\r$//;
        print $dnsip,"\n";

论坛徽章:
0
9 [报告]
发表于 2009-08-24 10:11 |只看该作者
谢谢大家,已经解决。果然是回车符的问题,但是我想不通的是linux下怎么会出现回车符的呢?

论坛徽章:
0
10 [报告]
发表于 2009-08-24 20:03 |只看该作者
或者先用dos2unix转下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP