我从主脚本调用perl脚本client.pl来捕获client.pl的输出 在@output。
无论如何都要避免使用这两个文件,所以我可以在main.pl本身使用client.pl的输出
这是我的代码......
main.pl
=======
my @output = readpipe("client.pl");
client.pl
=========
#! /usr/bin/perl -w
#use strict;
use Socket;
#initialize host and port
my $host = shift || $FTP_SERVER;
my $port = shift || $CLIENT_PORT;
my $proto = getprotobyname('tcp');
#get the port address
my $iaddr = inet_aton($host);
my $paddr = sockaddr_in($port, $iaddr);
#create the socket, connect to the port
socket(SOCKET, PF_INET, SOCK_STREAM, $proto)or die "socket: $!\n";
connect(SOCKET, $paddr) or die "connect: $!\n";
my $line;
while ($line = <SOCKET>)
{
print "$line\n";
}
close SOCKET or die "close: $!";
/岩石..
答案 0 :(得分:3)
将公共代码放在包中。 Use client.pl和main.pl中的包。 Programming Perl的第10章提供了更多信息。
答案 1 :(得分:0)
不确定你真正想做什么,但可能会调查Net :: FTP(http://search.cpan.org/perldoc?Net%3A%3AFTP)等软件包
答案 2 :(得分:0)
你可以做两件事:
合并client.pl和main.pl中的代码,因为除了打印之外,您的主要功能不起作用。如果您想从传入的输入数据中做更多的事情,您应该在client.pl本身中执行此操作,因为内存数组(@output
)可能会在RAM中读取大型数据时耗尽RAM。
如果您想要输出数组(@output
)
sub client {
# intialize ..
my @array = (); #empty array
while ($line = <SOCKET>)
{
push(@array,$line);
}
return @array;
}
@output = client();
print @output;
其他方式,您也可以使用引用:
sub client {
# intialize ..
my @array = (); #empty array
while ($line = <SOCKET>)
{
push(@array,$line);
}
return @array;
}
my $output_ref = client();
print @$output_ref; // dereference and print.