Как избежать Perl-скрипта, вызывающего другой Perl-скрипт - PullRequest
1 голос
/ 04 апреля 2010

Я вызываю Perl-скрипт client.pl из основного скрипта, чтобы получить выходные данные client.pl в выходной @.

в любом случае, чтобы избежать использования этих двух файлов, я могу использовать вывод client.pl в самом main.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: $!";

/ каменистый ..

Ответы [ 3 ]

3 голосов
/ 04 апреля 2010

Положите общий код в пакет. Используйте пакет в client.pl и main.pl. Глава 10 Программирование на Perl содержит больше информации.

0 голосов
/ 04 апреля 2010

вы можете сделать две вещи:

  1. Объедините коды в client.pl и main.pl, так как ваша основная функция не работает, кроме печати. Если вы хотите сделать больше из входных входных данных, вы должны сделать это в самом файле client.pl, поскольку массиву в памяти (@output) может не хватить ОЗУ при чтении данных большого размера по сети.

  2. Если вы хотите вывод в массиве (@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.
0 голосов
/ 04 апреля 2010

Не уверен, что вы на самом деле пытаетесь сделать, но возможно, вам не удастся исследовать такой пакет, как Net :: FTP (http://search.cpan.org/perldoc?Net%3A%3AFTP)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...