[SP-pm] Auxilio em código

Luis Motta Campos luismottacampos at yahoo.co.uk
Sat Nov 7 06:04:10 PST 2009


Juliana wrote:
> Olá lista Perl! bom dia!
> Preciso de uma dica de vocês..
> Preciso extrair (imprimir) algumas informações do arquivo .enw (endnote). Olhem meu código em anexo; e também anexei um exemplo de arquivo.enw
> Dúvida 1: está dando essa mensagem de erro ao 'compilar':
> refer: l.1: line outside record: <
> Dúvida 2: Neste trecho de código:
>   my @authors    = $ref->author;     
>   my $lastAuthor = $ref->author;
>   my $firstAuthor = $ref->author;
> Está correto isso para eu 'pegar' e imprimir somente o primeiro e o último autor da lista de autores?

Juliana,

O seu programa não é robusto o bastante para suportar
dados mal-formados. Os seus dados, por sua vez, estão muito mal
formados: a primeira linha do arquivo 4.enw contém
"<\x{9}\x{9}\x{9}\x{9}\x{9}\x{9}\x{9}\x{9} \x{9}\x{9}\x{9}>", que
não é exatamente o que o módulo Text::Refer espera como entrada de
dados. Assim, como nem o seu programa nem o módulo que você usa
verificam seus dados, erros inesperados acontecem sempre que você
alimenta dados ruins para o seu programa.

Para resolver o problema e fazer seu programa funcionar corretamente,
eu removi a primeira linha do arquivo à mão. Uma solução mais robusta
incluiria algum tipo de conferência de syntaxe (os termos técnicos são
"tokenization" e "parsing") antes de qualquer tentativa de processar o
arquivo.

Sobre a forma correta de imprimir o primeiro e o último autor: sua tentativa é estranha, já que você faz chamadas demais para $ref->author (que eu presumo ser uma função do Text::Refer que retorna uma lista de autores).

Para obter o primeiro e o último elemento de uma lista em Perl existem muitas formas, mas a minha favorita é esta:

my ( $first, $last ) = ( $ref->author )[0,-1];

Espero que isso ajude.
Putamplexos
 --
Luis Motta Campos is a software engineer,
Perl junkie, foodie and amateur photographer.



      


More information about the SaoPaulo-pm mailing list