# Caso a formula '[1]' seja verdadeira, executa os próximos comandos if\((.*)\)\ *\{
#\!\/usr\/bin\/perl
####################################################### #\!\/usr\/bin\/perl
# Código comentado pelo script 'comenta' # #!/usr/bin/perl
# Feito por Fernando Corrêa de Oliveira # #!/usr/bin/perl
####################################################### #!/usr/bin/perl
#!/usr/bin/perl
# Caso a formula '[1]' seja verdadeira, executa os próximos comandos ^\s*if\s?\((.*)\)\s*\{?
# Caso a formula '[2]' seja verdadeira, executa o comando '[1]' ^\s*(.*)\ if\ ?\(?(.*)\)?\s?;
# A não ser que a formula '[1]' seja verdadeira, executa os próximos comandos ^\s*unless\ ?\(?(.*)\)?\ *\{
# A não ser que a formula '[2]' seja verdadeira, executa o comando '[1]' ^\s*(.*)\ unless\ ?\(?(.*)\)?\ *;
# Enquanto a expressão '[1]' for verdadeira... while\s?\((.*)\)\s?\{?
# Para a expressão '[1]' for\s?\((.*)\)\s?\{
# '[1]' => o mesmo que: '[2] = [2] + [3]' ((\$\w)+\+=(\d+))
# Abre o arquivo '[2]' com o titulo '[1]' open\((.*)\ ?\,\ ?(.*)\)
# Retira o '\n' do final da variavel [1] chomp\((\$.*)\)
# Fecha o arquivo com o titulo '[1]' close\(?\ ?(.*)\)?\ ?;
# Usuario [1] com UID [3] e home [6] (.*):(x?):(.*):(.*):(.*):(.*):(.*)
# Para a cada um dos argumentos de '[1]' faça foreach\ *\((.*)\)\ *{
# Para [1] sendo igual a cada um dos argumentos de '[2]' faça foreach\ *($.*)\ \((.*)\)\ ?{
# '[1]' => de [2] até [3] (([0-9]+)\ ?\.\.\ ?([0-9]+))
# '[1]' recebe o parametro passado na chamada da função \((\$.*)\)=\@_
# [1] => '[2]' recebe o 1º parametro passado na chamada do programa excluindo-o ((\$.*)=shift)
# Declaração da variavel '[1]' local my\s*(\$\w*);
# Declaração da variavel '[1]' global our\s*(\$\w*);
# [1] => Declaração da variavel '[2]' local contendo '[3]' (my\s*(\$\w+)=(.*));
# [1] => Declaração da variavel '[2]' global contendo '[3]' (our\s*(\$\w+)=(.*));
# Declaração do hash '[1]' local my\s*(\%\w+);
# Declaração do hash '[1]' global our\s*(\%\w+);
# [1] => Valor da posição '[3]' do hash %[2] (\$(\w+)\{(.+)\})
# return() => Sai da função return\ ?\(?\ ?\)?
# return([1]) => Sai da função com '[1]' como valor de retorno return\ ?\(?\ (.*)\ ?\)?
# Como a função já diz: Usa o módulo '[1]' ^use\s+(.+);
############################### Função '[1]' ####################### ^\s*sub (\w*\(?\)?)\ *\{?$
# [1] => Testa a expressão regular '[3]' na variavel '[2]' \s?((\$\w+)\s?=~\s?(\/.+\/))
# [1] => Reconhece qq tipo de espaço, como branco, tabulação ou quebra de linha \s?\$\w+\s?=~\s?\/.*(\\s).*\/
# [1] => Reconhece qq letra \s?\$\w+\s?=~\s?\/.*(\\w).*\/
# [1] => Reconhece qq palavra \s?\$\w+\s?=~\s?\/.*(\\W).*\/
# [1] => Reconhece qq numero \s?\$\w+\s?=~\s?\/.*(\\d).*\/
# [1] => Reconhece qq coisa entre '[2]' e '[3]' \s?\$\w+\s?=~\s?\/.*(\[(\w|\d)\-(\w|\d)\]).*\/
# [1] => A expressão '[2]' deve aparecer entre [3] e [4] vezes \s?\$\w+\s?=~\s?\/.*(([\[|\(].+[\]|\)])\{(\d),(\d)\}).*\/
# [1] => A expressão '[2]' deve aparecer entre [3] e [4] vezes \s?\$\w+\s?=~\s?\/.*((\\.)\{(\d),(\d)\}).*\/