Xavier Nayrac

Rubyiste accro au TDD, serial blogger, apprenti data scientist, heureux utilisateur de Vim, accordéoniste.
Si vous vous sentez particulièrement généreux, suivez moi sur Twitter.

Remplacer Sed et Awk par Ruby 3: BEGIN et END

| Comments

Niveau : facile

Les blocs BEGIN et END du langage Ruby paraissent étranges pour beaucoup de personnes. Ils sont inutiles (et certainement néfastes) pour des programmes dit classiques. Ils peuvent être utiles pour un script. Il sont indispensables pour remplacer Sed et Awk et on va donc les regarder plus en détail.

Un exemple simple vaut mieux qu’un long discours:

test1.rb
1
2
3
BEGIN { puts "avant" }
END { puts "après" }
puts "au milieu"
[~]⇒ ruby test1.rb 
avant
au milieu
après

BEGIN est donc l’endroit où on initialisera les variables et END permettra de faire les calculs et l’affichage en fin de traitement.

Il faut savoir qu’on peut avoir plusieurs blocs BEGIN et END. Les blocs BEGIN seront interprétés dans l’ordre d’apparition, tandis que les blocs END seront interprétés dans l’ordre inverse d’apparition:

test2.rb
1
2
3
4
5
6
END { puts "end 1" }
END { puts "end 2" }
END { puts "end 3" }
BEGIN { puts "begin 1" }
BEGIN { puts "begin 2" }
BEGIN { puts "begin 3" }
[~]⇒ ruby test2.rb
begin 1
begin 2
begin 3
end 3
end 2
end 1

Enfin, pour être exhaustif, on ne peut pas remplacer les {} par do et end, comme on pourrait s’y attendre:

test3.rb
1
2
3
BEGIN do
  puts "avant"
end
[~]⇒ ruby test3.rb
test3.rb:1: syntax error, unexpected keyword_do, expecting '{'
test3.rb:3: syntax error, unexpected keyword_end, expecting end-of-input

À demain.

Articles connexes

Commentaires