|
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
|