Projecto ---> Projecto* Hvida* Sinopse? ; ::nome={ # Cada um destes blocos de codigo tem acesso a uma variavel por cada um dos tipos # que pode conter... neste caso, @Projecto, @Hvida e $Sinopse (note-se a # diferenca entre os arrays e os escalares. # # Alem destes, tem acesso ao $_ que e' o objecto actual (e portanto, pode # ser utilizado como $_->{attr} para aceder ao nome de ficheiro de cada # atributo ou utilizado como $_->{_} para aceder ao nome do # ficheiro/directoria original. # # De forma identica, $_->{nome}, neste caso, sera' o ficheiro que a funcao # deve criar. # # Caso a funcao retorne um valor definido (nao retorne undef), sera' aberto # o ficheiro do atributo respectivo e colocado la' os seus dados. Portanto, # quando se trata de texto, basta-nos retornar esse mesmo texto. No # entanto, quando utilizamos, por exemplo, um comando 'convert', temos de # ter o cuidado de fazer 'return undef' uma vez que o ficheiro e' criado # com efeitos laterais. # # Alem disto tudo, podemos fazer um transformador (ja' existe, ate') que # transforma @Projecto->{cat}, por exemplo, no array de ficheiros de # catalogos dos Projectos (ou seja, map {$_->{cat}} @Projecto). # # ... if ($Sinopse) { $Sinopse->{nome} } else { path2nome($_); } } ::cat={ junta(@Projecto->{cat},@Hvida->{cat}); } ::index.html [nome]={ mkprojindex($_->{nome}, @Projecto->{nome}, $Sinopse->{html}) # No caso de nao existir, leva com undef } Sinopse ; ::html={ sin2html($_) } ::nome={ sin2nome($_) } Hvida ---> MPessoa* Album? ; ::cat={ catalogo(@MPessoa->{cat})) } ::nome [cat]={ extraidepoente($_->{cat}) } MPessoa; ::cat={ mp2cat($_) } %% (start of code...)