Usando PhantomJS do Perl

Basicamente, o que você precisa para passar um pedaço de dados estruturados de Perl para PhantomJS e deixá-lo fazer seu trabalho.
Para conseguir isso, você serializa os dados que gostaria de usar no trabalho PhantomJS por meio da biblioteca JSON e os passa para um script phantomjs predefinido.

Em primeiro lugar, você prepara um pequeno modelo JS para fazer seu trabalho no lado do PhantomJS:

/* 
A (JavaScript) template for the PhantomJS job.

It assumes the inputData variable is defined above

*/


console
.log("[PhantomJS] Here I shall do something useful with the following data:");
console
.log(inputData);
console
.log("[PhantomJS]");

/*
Capture Screenshots of the page(s)

https://github.com/ariya/phantomjs/wiki/Screen-Capture


Capture network traffic of the page(s)

https://github.com/ariya/phantomjs/wiki/Network-Monitoring


Whatever useful you can find at the official wiki

https://github.com/ariya/phantomjs/wiki/_pages

*/


phantom
.exit();

E então você o executa a partir do seu programa Perl com o PhantomJS. Algo assim:

#!/usr/bin/env perl
use strict;
use warnings;

use File::Temp 'tempfile';
use JSON;

my $script_content = join '', <DATA>;

run_phantom
(["http://google.com", "http://twitter.com"]);
# or ...
run_phantom
({foo => "bar"});

sub run_phantom {
my $data = shift;

my $phantomjs = $ENV{PHANTOMJS} || 'phantomjs';

# Generate temporary script file
my $tempfile = File::Temp->new(
TEMPLATE
=> "phantomjs-script-XXXXXX",
SUFFIX
=> '.js',
# You might want to turn this off
# for debugging purposes
CLEANUP
=> 1
);
print $tempfile "var inputData = " . encode_json($data) . ";n";
print $tempfile $script_content;
close $tempfile
;

# Run it
system
($phantomjs, $tempfile);
if ($?) {
my $exitcode = $? >> 8;
die
"-- PhantomJS exited with code $exitcoden";
}
print "-- PhantomJS succeededn";
}

print "-- Successn";

__DATA__


/*
A
(JavaScript) template for the PhantomJS job.
It assumes the inputData variable is defined above
*/

console.log("[PhantomJS] Here I shall do something useful with the following data:");

console.log(inputData);

console.log("[PhantomJS]");


/
*
Capture Screenshots of the page(s)
https
://github.com/ariya/phantomjs/wiki/Screen-Capture

Capture network traffic of the page(s)
https
://github.com/ariya/phantomjs/wiki/Network-Monitoring

Whatever useful you can find at the official wiki
https
://github.com/ariya/phantomjs/wiki/_pages
*/

phantom
.exit();

Apenas certifique-se de que o phantomjsbinário esteja em seu caminho ou seja definido pela variável de ambiente ‘PHANTOMJS’.

E ele simplesmente funciona, sem compilar toda a ligação com o código-fonte do PhantomJS e assim por diante.

Na maioria dos casos, o que você precisa é processar uma lista de <algo> e obter uma lista apropriada de resultados. Seja o que for: capturas de tela, monitoramento de tráfego, procura de estruturas externas, despejando dados ou executando seus testes automatizados com um conjunto específico de dados. Se quiser usar o PhantomJS do Perl, você já tem uma lista de itens para processar.

Então a ideia é passar todos esses dados para o terreno JS e processar com todos os recursos que o PhantomJS oferece.

Claro, em alguns casos raros você realmente precisa acessar diretamente a API PhantomJS de seu programa devido a questões de desempenho. Mas esta é uma história diferente.

Links para a documentação de todos os itens acima:

PhantomJS:

https://github.com/ariya/phantomjs/wiki
https://github.com/ariya/phantomjs/wiki/Screen-Capture
https://github.com/ariya/phantomjs/wiki/Network-Monitoring

Biblioteca Perl JSON:
https://metacpan.org/module/JSON

Função ‘system ()’ Perl:
http://perldoc.perl.org/functions/system.html