请问@数组的值是否有最大数量限制?

请问@数组的值是否有最大数量限制?

我的以下程序代码,换个文件名,就能执行成功:
                #$msg_file = "/var/adm/messages";
                $msg_file = "/etc/hosts";
                @my_result = $telnet -> cmd("cat $msg_file ");
                #& clear_prompt;
                print "\@my_result is \n@my_result \n";
                @cat_message = @my_result;
                print "\@cat_message is \n@cat_message \n";

结果是:
@cat_message is
#
# Internet host table
#
::1     localhost      
127.0.0.1       localhost      
3.3.3.10        solaris01       solaris01.jjqing.com    loghost
3.3.3.1         jjqing
root@solaris01  

但是换成$msg_file = "/var/adm/messages,显示的内容却是空的:
@cat_message is

是不是因为@数组的值,有最大数量限制?我的/var/adm/messages有36891行:
root@solaris01 # cat /var/adm/messages |wc -l
   36891

Perl 不会加这种限制。你把出问题的文件直接打开读取看看
直接读取是能够读取的,在本地用cat /var/adm/messages,以及用telnet方法去读,也可以读取,从telnet_input.log可以看得到输出的结果:
以下是ls -l telnet的日志:

-rw-r--r--   1 root     root     5410078 Oct 17 19:38 telnet_dump.log
-rw-r--r--   1 root     root     1068194 Oct 17 19:38 telnet_input.log
-rw-r--r--   1 root     root         538 Oct 17 19:38 telnet_output.log

root@solaris01 # more telnet_input.log
...
...
root@solaris01 # /bin/ksh -c "export LANG=C;ls -l /var/adm/messages"
-rw-r--r--   1 root     root     3659366 Oct 17 19:36 /var/adm/messages
root@solaris01 # cat /var/adm/messages
Sep  1 11:31:05 solaris01 genunix: [ID 672855 kern.notice] syncing file systems...
Sep  1 11:31:05 solaris01 genunix: [ID 904073 kern.notice]  done
Sep  1 11:31:50 solaris01 genunix: [ID 540533 kern.notice] ^MSunOS Release 5.10 Version Generic_127128-11 64-bi
t
Sep  1 11:31:50 solaris01 genunix: [ID 172908 kern.notice] Copyright 1983-2008 Sun Microsystems, Inc.  All righ
...
...

但是返回到@my_result中,就变成空的了。
经测试,在本地运行时,把/var/adm/messages读到@数组中,是没有问题的,看来,问题是出在:
                                @cat_message = $telnet -> cmd("cat $msg_file");
这条语句上面。

请各位帮忙看看,谢谢!
经过反复测试,做以下处理时:
root@solaris01 # head -20000 /var/adm/messages > /tmp/messages
root@solaris01 # head -15000 /var/adm/messages > /tmp/messages
root@solaris01 # head -11000 /var/adm/messages > /tmp/messages
root@solaris01 # head -14000 /var/adm/messages > /tmp/messages
root@solaris01 # head -13000 /var/adm/messages > /tmp/messages
root@solaris01 # head -12000 /var/adm/messages > /tmp/messages
root@solaris01 # head -11000 /var/adm/messages > /tmp/messages
root@solaris01 # head -11500 /var/adm/messages > /tmp/messages

以下代码:
                #$msg_file = "/var/adm/messages";
                $msg_file = "/tmp/messages";
                $msg_file_name = (split /\//,$msg_file)[3];
                @cat_message = $telnet -> cmd("cat $msg_file");
                print "\@cat_message is \n@cat_message \n";



只有在head -11000时,能够正常运行,head -11500都不行。

看来,是telnet这个模块有限制啊。

因此,我把代码改成了:                @cat_message = $telnet -> cmd("tail -10000 $msg_file");
用input_log() 和 dump_log()看具体出了什么问题
落叶季节,思念季节
为什么不先把文件下载到本地再处理。另外,大文件还是逐行或者逐块处理的好,一次性将其全部读入内存可不是什么好习惯。
楼上说的对
落叶季节,思念季节
我是telnet到远程主机,用cmd方法读出远程主机的messages文件,因此,占用的内存,也是本地主机的内存,对远程主机没有影响。
你说的是很有道理,但是我知道messages不应该很大,所以这样处理,也是可以的。

现在我用tail -10000,就更可靠了。


... ...
1小时后
... ...

占用的内存,也是本地主机的内存,对远程主机没有影响,现在再看看这句话,似乎是有问题,在远程执行cat /var/adm/messages,肯定会占用远程主机的内存,然后再传到本地来。

是应该好好考虑这个问题的。

谢谢了!

telnet_input.log中,能看到它确实执行了cat /var/adm/messages命令,但是只读到了messages文件的第11198行,以下是按照telnet_input.log中最后几行内容,在vi messages中设置了行号后看到的结果:
11189  Sep 15 00:22:43 solaris01 genunix: [ID 408114 kern.info] /pci@0,0/pci1000,30@11/sd@0,0 (sd1) online
11190  Sep 15 00:22:43 solaris01 scsi: [ID 193665 kern.info] sd12 at mpt1: target 1 lun 0
11191  Sep 15 00:22:43 solaris01 genunix: [ID 936769 kern.info] sd12 is /pci@0,0/pci1000,30@11/sd@1,0
11192  Sep 15 00:22:43 solaris01 genunix: [ID 408114 kern.info] /pci@0,0/pci1000,30@10/sd@0,0 (sd0) online
11193  Sep 15 00:22:43 solaris01 scsi: [ID 193665 kern.info] sd4 at mpt0: target 1 lun 0
11194  Sep 15 00:22:43 solaris01 genunix: [ID 936769 kern.info] sd4 is /pci@0,0/pci1000,30@10/sd@1,0
11195  Sep 15 00:22:43 solaris01 genunix: [ID 408114 kern.info] /pci@0,0/pci1000,30@12/sd@0,0 (sd2) online
11196  Sep 15 00:22:43 solaris01 scsi: [ID 193665 kern.info] sd13 at mpt2: target 1 lun 0
11197  Sep 15 00:22:43 solaris01 genunix: [ID 936769 kern.info] sd13 is /pci@0,0/pci1000,30@12/sd@1,0
11198  Sep 15 00:22:43 solaris01 genunix: [ID 408114 kern.info]


与我做的head -11000 测试相近,是否是因为telnet模块对变量有限制?