Die Programmiersprache Ruby

Blog| Forum| Wiki  

Dieser Artikel behandelt die von Ruby vordefinierten globalen Variablen. Einige dieser Variablen können nach einem 'require "English"' mit ansprechenderen Namen referenziert werden, wo dies möglich ist, wird die Alternative kursiv angemerkt.

Liste vordefinierter globaler Variablen

  • $!

Enthält die Informationen zur letzten Fehlermeldung. Diese Variable wird bei einem Aufruf von Kernel#raise gesetzt. "Englische" Alternative: $ERROR_INFO.

1
2
3
4
5
6
#Beispiel: 
begin
  raise(NotImplementedError, "each-Methode ohne Code-Block nicht vorhanden")
rescue
  puts $!.message #=> each-Methode ohne Code-Block nicht vorhanden
end
  • $@

"Pfad" zum Auslöser des letzten Fehlers (Vergleiche auch Kernel#caller). Alternativ: $ERROR_POSITION.

1
2
3
4
5
6
7
8
9
10
11
12
13
#Beispiel
def a
  raise "Error in 'a'!"
end
def b
  a
end

begin
  b
rescue
  p $@ #=> ["test.rb:3:in `a'", "test.rb:6:in `b'", "test.rb:10"]
end
  • $&

Der String, auf den der letzte Regexp-Vergleich zutraf. Auch $MATCH.

1
2
3
#Beispiel
"Das gesuchte Zeichen ist >a<!".match(/>.</)
puts "Das gesuchte Zeichen war #{$&}!" #=> Das gesuchte Zeichen war a!
  • $`

$PREMATCH enthält den Teilstring, der vor einem zutreffenden Regexp-Vergleich zu finden ist.

1
2
3
#Beispiel
"Das gesuchte Zeichen ist >a<!".match(/>.</)
puts "Vor dem Zeichen war >#{$`}<." #=> Vor dem Zeichen war >Das gesuchte Zeichen ist <.
  • $'

$POSTMATCH ist das Gegenstück zur oben genannten Variable, sie enthält alles, was nach dem Vergleich kommt:

1
2
3
#Beispiel
"Das gesuchte Zeichen ist >a<!".match(/>.</)
puts "Nach dem Zeichen war >#{$'}<." #=> Nach dem Zeichen war >!<.
  • $+

Das Ergebnis der letzten Klammer einer Regexp. Nach 'require "English"' auch $LAST_PAREN_MATCH.

1
2
3
#Beispiel
"Das gesuchte Zeichen ist >a<!".match(/(Das|Die) gesucht(e|en)/)
puts " >#{$+}<." #=> Die letzte Klammer enthielt >e<.
  • $1, $2, ... $n

Gibt das Ergebnis der Klammer n des letzten Regexp-Vergleiches zurück.

1
2
3
#Beispiel
"Das gesuchte Zeichen ist >a<!".match(/(Das|Die) gesucht(e|en)/)
puts "Die erste Klammer enthielt >#{$1}<." #=> Die erste Klammer enthielt >Das<.
  • $~

Enthält alle Informationen über den letzten Regexp-Vergleich als Regexp. Synonym: $LAST_MATCH_INFO.

1
2
3
#Beispiel
"Das gesuchte Zeichen ist >a<!".match(/(Das|Die) gesucht(e|en)/)
puts "Nach dem Ausdruck steht >#{$~.post_match}<." #=> Nach dem Ausdruck steht > Zeichen ist >a<!<.
  • $=

Wenn nicht nil oder false, ignorieren Regexp-Vergleiche, String-Hash-Keys und Stringvergleiche die Groß- und Kleinschreibung. Gilt als veraltet. Englische Alternative: $IGNORECASE.

1
2
3
4
#Beispiel
$= = true
"A".match(/a/)
puts $&

Output:

1
2
A
a.rb:2: warning: modifying $= is deprecated
  • $/

$/ und der Alias $RS bezeichnen das Zeichen, das als Trennzeichen beim Lesen von Daten fungiert. Standradmäßig Newline.

1
2
3
#Beispiel
$/ = nil
puts File.open(__FILE__){|file| file.read}

Output:

1
2
3
#Beispiel
$/ = nil
puts File.open(__FILE__){|file| file.read}
  • $\

Das Trennzeichen für Methoden wie IO#print und IO#write. Standardmäßig nil. Englisch $ORS.

1
2
3
4
5
#Beispiel
$\ = "--"
print("Ein")
print("Beispiel")
#=> Ein--Beispiel--
  • $,

$OFS enthält den Trenner für Methoden wie Array#join. Standardmäßig nil.

1
2
3
#Beispiel
$, = ", "
puts [1, 2, 3].join #=> 1, 2, 3
  • $;

Separator für String#split, synonymisch $FS. Normalerweise nil, was wie Whitespace wirkt.

1
2
3
#Beispiel
$; = "-"
puts "Das ist - ein Beispiel".split

Output:

1
2
Das ist 
 ein Beispiel
  • $.

Die aktuelle Zeile in der tatsächlichen Quelldatei, nicht in einer per require oder load geladenen. __LINE__ dagegen gibt die aktuelle Zeile in der Datei an, in der __LINE__ denn auch steht. Englisch auch $NR.

1
2
3
4
5
6
7
8
9
10
#Beispiel mit 2 Dateien, "A.rb" und "B.rb". 
#A.rb: ------------------------------------------------
puts "Urspr��ngliches Programm!"
#'load' steht in Zeile 3!
load("B.rb")
#B.rb: ------------------------------------------------
puts "per 'load' geladene Datei!"
puts "Zeile in 'B.rb' (__LINE__): #{__LINE__}"
#'$.' steht in Zeile 4!
puts "Zeile in 'A.rb' ($.): #{$.}"

Output:

1
2
3
4
Urspr��ngliches Programm!
per 'load' geladene Datei!
Zeile in 'B.rb' (__LINE__): 2
Zeile in 'A.rb' ($.): 4
  • $<

Wenn auf der Shell bzw. Konsole bzw. Eingabeaufforderung dem Ruby-Programm Dateien mitgegeben wurden, enthält diese Variable, die sich englisch $DEFAULT_INPUT oder auch einfach ARGF liest, die Inhalte dieser Dateien einfach aneinandergehängt.

  • $>

(Normalerweise) nichts anderes als $stdout und englisch $DEFAULT_OUTPUT. Steht also für das Standardziel von Methoden wie Kernel#puts.

  • $_

Die $LAST_READ_LINE, "letzte gelesene Zeile" , aus der Shell bzw. Konsole bzw. Eingabeaufforderung.

  • $0

Das momentan tatsächlich agierende Ruby-Programm. Eine für $0 und __FILE__ äquivalente Erklärung steht unter $., nur dass sich $0 und __FILE__ auf die gesamten Dateien beziehen.

  • $*

Alle Argumente, abzüglich der für den Ruby-Interpreter, die auf der Shell bzw. Konsole bzw. Eingabeaufforderung einem Ruby-Programm mitgegeben wurden, finden sich hier, in $ARGV oder auch einfach in ARGV.

1
2
3
#Programm wird aufgerufen per 
#ruby -w Test.rb -f "Meine Datei.txt"
p ARGV #=> ["-f", "Meine Datei.txt"]
  • $$

Die Process Identification Number, also Prozessidentifikationsnummer, $PID, des aktuellen Ruby-Programms.

puts $$ #=> 4109
  • $?

Beendigungsstatus des zuletzt ausgeführten Kindprozesses.

  • $:

(Der Äquivalent $LOAD_PATH ist auch ohne 'require "English"' verfügbar) Alle Pfade, in denen der Ruby-Interpreter nach ausführbaren Ruby-Skripten und -Programmen sucht. Dazu zählen z.B. das Ruby-lib-Verzeichnis und das, in dem sich das aktuell laufende Programm befindet.

1
2
$: << "Ein/Extra/Dateipfad"
require "meine_extra_datei"
  • $"

($LOADED_FEATURES ist auch ohne ein 'require "English"' verfügbar) Alle Dateien, die bisher geladen wurden, als Array.

1
2
3
4
5
puts $"
require "rubygems"
require "coderay"
puts "-" * 20
puts $"

Output:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
enumerator.so
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/1.9.1/i686-linux/enc/encdb.so
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/1.9.1/i686-linux/enc/trans/transdb.so
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/1.9.1/rubygems.rb
--------------------------------------------------
enumerator.so
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/1.9.1/i686-linux/enc/encdb.so
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/1.9.1/i686-linux/enc/trans/transdb.so
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/1.9.1/rubygems.rb
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/gems/1.9.1/gems/coderay-0.8.312/lib/coderay/token_classes.rb
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/gems/1.9.1/gems/coderay-0.8.312/lib/coderay/tokens.rb
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/gems/1.9.1/gems/coderay-0.8.312/lib/coderay/helpers/plugin.rb
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/gems/1.9.1/gems/coderay-0.8.312/lib/coderay/scanners/_map.rb
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/1.9.1/i686-linux/strscan.so
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/gems/1.9.1/gems/coderay-0.8.312/lib/coderay/helpers/word_list.rb
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/gems/1.9.1/gems/coderay-0.8.312/lib/coderay/scanner.rb
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/1.9.1/i686-linux/stringio.so
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/gems/1.9.1/gems/coderay-0.8.312/lib/coderay/encoders/_map.rb
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/gems/1.9.1/gems/coderay-0.8.312/lib/coderay/encoder.rb
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/gems/1.9.1/gems/coderay-0.8.312/lib/coderay/duo.rb
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/gems/1.9.1/gems/coderay-0.8.312/lib/coderay/styles/_map.rb
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/gems/1.9.1/gems/coderay-0.8.312/lib/coderay/style.rb
/home/marvin/Programmieren/ruby-1.9.1-p129/lib/ruby/gems/1.9.1/gems/coderay-0.8.312/lib/coderay.rb
  • $DEBUG

Spezielle Variable, die auch über die Shell bzw. Konsole bzw. Eingabeaufforderung mithilfe des Arguments -d gesetzt werden kann. Kann für Testzwecke im Programm verwendet werden.

1
2
3
#Beispiel
puts "Das ist ein Test. " if $DEBUG
puts "Das hier l��uft immer. "


1
2
3
4
5
$ ruby debug.rb
Das hier l��uft immer. 
$ ruby debug.rb -d
"Das hier ist ein Test. 
Das hier l��uft immer.
  • $VERBOSE

Gibt an, ob Warnungen eingeschaltet sind, was durch Angeben der -w-Option an den Ruby-Interpreter erreicht werden kann.

  • $defout

Siehe $>.

  • $FILENAME

Die einzige Möglichkeit, herauszubekommen, aus welcher Datei ARGF gerade liest.

1
2
3
4
#Aufruf: 
#ruby Test.rb Test1.txt Test2.txt
ARGF.readline
puts $FILENAME #=> Test1.txt
  • $LOAD_PATH

Siehe $:.

  • $SAFE

Sicherheitsstufe in Ruby, kann Werte von 0 bis 4 annehmen und nicht verringert werden. Siehe dazu $SAFE.

  • $stdin

Standardeingabe, normalerweise auf die Konstante STDIN gesetzt.

  • $stdout

Standardausgabe, normalerweise auf die Konstante STDOUT gesetzt.

  • $stderr

Standardfehlerausgabe, normalerweise auf die Konstante STDERR gesetzt.

$stdout = $stderr = File.open("MyApplicationLog.log", "a")