Лучше не делать этого, и вместо того, чтобы принять структурированный подход, как MooseX::Runnable.
Ваш класс будет выглядеть следующим образом:
class Get::Me::Data with (MooseX::Runnable, MooseX::Getopt) {
has 'dsn' => (
is => 'ro',
isa => 'Str',
documentation => 'Database to connect to',
);
has 'database' => (
is => 'ro',
traits => ['NoGetopt'],
lazy_build => 1,
);
method _build_database {
Database->connect($self->dsn);
}
method get_data(Str $for_person){
return $database->search({ person => $for_person });
}
method run(Str $for_person?) {
if(!$defined $for_person){
print "Type the person you are looking for: ";
$for_person = <>;
chomp $for_person;
}
my @data = $self->get_data($for_person);
if([email protected]){
say "No data found for $for_person";
return 1;
}
for my $data (@data){
say $data->format;
}
return 0;
}
}
Теперь у вас есть класс, который может быть использован в вашей программе легко:
my $finder = Get::Me::Data->new(database => $dbh);
$finder->get_data('jrockway');
Внутри интерактивный сценарий, который больше, чем просто «бега "выше:
...
my $finder = Get::Me::Data->new(dsn => 'person_database');
$finder->run('jrockway') and die 'Failure'; # and because "0" is success
say "All done with Get::Me::Data.";
...
Если вы просто хотите сделать это отдельно, вы можете сказать:
$ mx-run Get::Me::Data --help
Usage: mx-run ... [arguments]
--dsn Database to connect to
$ mx-run Get::Me::Data --dsn person_database
Type the person you are looking for: jrockway
<data>
$ mx-run Get::Me::Data --dsn person_database jrockway
<data>
Обратите внимание, как мало кода вы написали и насколько гибким является результирующий класс. «главное, если!», приятно, но зачем беспокоиться, когда вы можете сделать лучше?
(BTW, MX :: Runnable имеет плагины, поэтому вы можете легко увеличить количество отладочного вывода, которое вы видите, перезапустить приложение, когда код изменяется, сделать приложение постоянным, запустить его в профилировщике и т. Д.)
Это действительно полезно. Спасибо за ссылку. – seth
@seth добро пожаловать. –
Как насчет 'perl -MMyClass -e '...''? –