Фильтр источника DSL
Вот еще одна попытка. У skiphoppy есть смысл, но при втором взгляде я заметил, что (пока) вы не спрашивали много, что было таким сложным. Вы просто хотите принять каждую команду и сказать удаленному серверу сделать это. Это не perl , который должен понимать команды, это сервер.
Итак, я удалил некоторые из моих предупреждений об исходных фильтрах и решил показать вам
как просто можно написать. Опять же, то, что вы делаете, не так сложно, и моя «фильтрация» ниже довольно проста.
package RemoteAppScript;
use Filter::Simple; # The basis of many a sane source filter
use Smart::Comments; # treat yourself and install this if you don't have
# it... or just comment it out.
# Simple test sub
sub send_command {
my $cmd = shift;
print qq(Command "$cmd" sent.\n);
return;
}
# The list of commands
my @script_list;
# The interface to Filter::Simple's method of source filters.
FILTER {
# Save $_, because Filter::Simple doesn't like you reading more than once.
my $mod = $_;
# v-- Here a Smart::Comment.
### $mod
# Allow for whole-line perl style comments in the script
$mod =~ s/^\s*#.*$//m;
# 1. Break the package up into commands by split
# 2. Trim the strings, if needed
# 3. lose the entries that are just blank strings.
@script_list
= grep { length }
map { s/^\s+|\s+$//g; $_ }
split /;/, $mod
;
### @script_list
# Replace the whole script with a command to run the steps.
$_ = __PACKAGE__ . '::run_script();';
# PBP.
return;
};
# Here is the sub that performs each action.
sub run_script {
### @script_list
foreach my $command ( @script_list ) {
#send_command( $command );
socket_object->send_command( $command );
}
}
1;
Вам нужно будет сохранить это в RemoteAppScript.pm
где-нибудь, где ваш Perl сможет его найти. (попробуйте perl -MData::Dumper -e 'print Dumper( \@INC ), "\n"'
, если вам нужно знать, где.)
Затем вы можете создать файл "perl", который имеет это:
use RemoteAppScript;
App.View2.Page2.Activate();
App.View1.Page2.Click();
Однако
Нет реальной причины, по которой вы не можете прочитать файл, содержащий команды сервера. Это выбросило бы вызов FILTER
. Вы бы
App.View2.Page2.Activate();
App.View1.Page2.Click();
в вашем файле сценария, и ваш Perl-файл будет выглядеть примерно так:
#!/bin/perl -w
my $script = do {
local $/;
<ARGV>;
};
$script =~ s/^\s*#.*$//m;
foreach my $command (
grep { length() } map { s/^\s+|\s+$//g; $_ } split /;/, $script
) {
socket_object->send_command( $command );
}
И назовите это так:
perl run_remote_script.pl remote_app_script.ras