Este site diz que as funções são mais rápidas que os aliases, mas ele corretamente aponta que os aliases são mais fáceis de entender - quando você quer algo muito simples e não precisa considerar passar argumentos, os aliases são convenientes e sensatos. Sendo assim, meu perfil pessoal tem cerca de 1.000 linhas e serve tanto como fonte de funções e ferramentas que utilizo muito, quanto como meio de guardar técnicas que posso consultar e reutilizar para outras tarefas, tanto com pseudônimos e funções lá.
Um problema, porém, é que os aliases têm precedência sobre as funções, e redefinições de aliases e funções podem causar problemas (por exemplo, se eu tiver uma função chamada gg
e depois no script, por acidente, eu tiver um alias chamado gg
- Mas também se uma função é redefinida posteriormente, novamente como uma função, ela substitui a definição anterior). O perfil carrega, mas acabo com problemas. Uma solução poderia ser eliminar todos os aliases e usar apenas funções (alguém faz isso, eu ficaria curioso para saber, porque se eu quiser fazer alias m=man
isso é mais intuitivo e sensato que function m() { man $@; }
?), mas ainda tenho o problema de redefinições de funções nesse caso.
Existe uma maneira de analisar um script com o objetivo de responder: "para cada declaração de um alias ou função, mostre-me todas as linhas que contêm uma nova declaração (alias ou função) desse item"?
Tente algo assim:
As linhas comentadas Data::Dump ,
print
edd
foram para depuração. Descomente-os para ter uma ideia melhor do que esse script faz e como ele funciona. A saída dadd
função doData::Dump
módulo é particularmente interessante, pois mostra a estrutura (e conteúdo) do%fa
HoH.Data::Dump
não está incluído no perl, é um módulo de biblioteca que você precisa instalar. Você não mencionou qual distro está usando, mas se estiver usando debian/ubuntu/mint/etc, você pode instalá-la comsudo apt install libdata-dump-perl
. Outras distribuições provavelmente o têm empacotado com um nome ligeiramente diferente. Caso contrário, você pode instalá-lo com ocpan
.Saída de exemplo (usando um arquivo contendo seus aliases do seu comentário mais algumas funções fictícias):
Grep simples para encontrar definições, mas não verifica redefinições:
Este one-liner Perl mantém uma contagem para que possa marcar redefinições:
(A ordem dos arquivos de entrada influencia qual deles não é marcado como uma "redefinição".)