我需要在我的路由器上输入scipt并查找代码并与之前记录的此IP信息进行比较,如果没有更改,则停止脚本.
我运行这个脚本 - $ perl~/test.pl
没有错误,但是没有创建文件my_ip.txt.
在原件脚本必须通过主机example.dyndns.org检查我的IP,但我的IP是灰色的.
所以我需要通过路由器来确定
#!/usr/bin/perl use LWP::UserAgent; my $routeraddress = `addr admin:Tavolzhansky@192.168.1.1/RST_conn_status.htm`; if ($routeraddress =~ /var info_get_wanip="((\d+\.){3}(\d+))"/) { my $ip = "$1.$2.$3.$4"; #?????????: open (FILE,"my_ip.txt"); my @lines =; $old_ip = $lines[0]; #????????? IP ?? ????? $old_ip =~ s/^\s+|\s+$//g; #trim close(FILE); if ($old_ip eq $ip) { die "IP not changed"; # ??????? ?? ???????, ???? IP ?? ????????? } open (FILE,">my_ip.txt"); print FILE $ip; # ?????????? ? ???? ????? IP close(FILE); ...... (this code is OK) }
不要因为连接到路由器的问题而带来代码的结尾
$ perl -cw -e 'print `addr admin:foo@192.168.1.1/bar`' Possible unintended interpolation of @192 in string at -e line 1. -e syntax OK
它不起作用,因为@192
插值为数组,并且您正在运行命令addr admin:Tavolzhansky.168.1.1/RST_conn_status.htm
而不是您想要的命令.
use warnings
如果您愿意使用调试器逐步执行代码,或者正如Andy建议的那样,如果您要检查返回值,那么很容易发现并修复.
为了@192
不被插值,逃避@
:
my $routeraddress = `addr admin:Tavolzhansky\@192.168.1.1/RST_conn_status.htm`;