|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Sergey Prozhogin 2:5030/324.324 24 Sep 2001 21:33:38 To : All Subject : хитрость --------------------------------------------------------------------------------
хочется сделать модуль со след. хитростью.
парсится файл. первые три символа обозначают тип поля в файле
и вот по этим трём символам надо вызвать определенную процедуру из библиотеки
сейчас есть неработающее решение (пишу по-памяти может что и упустил)
package parser;
use strict;
use Data::Dumper;
my $p_routines = {
'000' => \&parser::parse_000,
'001' => \&parser::parse_001,
...
};
sub getParsedInfo( $;$ )
{
my ($section, $param) = @_;
my $info;
return undef if( !defined($section) || $section eq '');
=cut
дальше получается черти-что и сбоку бантик вместо указателя на процедуру
print Dumper( $rountine ); дает $VAR1 = 'sub{"DUMMY"}'
делал кто нить такое?
или какие-нить идеи?
строго говоря всё это можно оформить как подключаемый модуль (не пекежд) и юзать
через require, а не use, но хочеться понять!
спасибо
=pod
if( exists( $p_routines->{$section} )){
my $routine = $p_routines->{$section};
$info = &$section->( $param );
}
else{
print "there is no handler for $section\n";
}
return $info;
}
sub parse_000( $ )
{
my $param = shift;
my $result;
$result->{name} = substr( $param, 5, 10 );
....
return $result;
}
sub parse_001( $ )
{
my $param = shift;
....
}
и вызывающий модуль
#!/usr/bin/perl -w
use strict;
use parser;
....
my @lines = <FILE_HANDLER>;
foreach my $line (@lines){
my $section = substr( $line, 0, 3 );
my $info = parser::getParserInfo( $section, $line );
next unless( defined( $info ));
...
}
-= воспоминания - pазновидность некpофилии
\\/br \\cc pro
--- kulatsky podpevala 3.00b2
* Origin: Renton WA 98058 (2:5030/324.324)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/45563bafaaaf.html, оценка из 5, голосов 10
|