ruby [opcje] [--] program [argumenty]

require 'library'

while gets             # Wczytanie wiersza danych do zmiennej $_.
  $F = split if $-a    # Rozbicie $_ na pola, jeli zostaa uyta opcja -a.
  chop! if $-l         # Odcicie koca wiersza z $_, jeli uyto opcji -l.
  # Tekst programu.
end

while gets             # Wczytuje wiersz danych do $_.
  $F = split if $-a    # Rozbija $_ na pola, jeli zostaa uyta opcja -a.
  chop! if $-l         # Odcina zakoczenie wiersza z $_, jeli zostaa uyta opcja -l.
  # Tekst programu.
  print                # Wysya na wyjcie $_ (dodajc $, jeli uyto opcji -l).
end

# Drukuje wszystkie moduy (z wyjtkiem klas).
puts Module.constants.sort.select {|x| eval(x.to_s).instance_of? Module}
# Drukuje wszystkie klasy (oprcz wyjtkw).
puts Module.constants.sort.select {|x|
  c = eval(x.to_s)
  c.is_a? Class and not c.ancestors.include? Exception
}
# Drukuje wszystkie wyjtki.
puts Module.constants.sort.select {|x|
  c = eval(x.to_s)
  c.instance_of? Class and c.ancestors.include? Exception
}

ruby -e 'puts Module.constants.sort.reject{|x| eval(x.to_s).is_a? Module}'

ruby -e 'puts global_variables.sort'

ruby -rEnglish -e 'puts global_variables.sort'

ruby -n -e 'print if /^A/' datafile

print if $_ =~ /^A/

os = `uname`             # Litera acuchowy i wywoanie metody w jednym.
os = %x{uname}           # Inna skadnia.
os = Kernel.`("uname")   # Bezporednie wywoanie metody.

files = `echo *.xml`

pipe = open("|echo *.xml")
files = pipe.readline
pipe.close

fork {
  puts "Witajcie z procesu potomnego: #$$"
}
puts "Witajcie z procesu nadrzdnego: #$$"

pid = fork
if (pid)
  puts "Proces nadrzdny: #$$"
  puts "Utworzono proces podrzdny #{pid}"
else
  puts Witajcie z procesu podrzdnego: #$$"
end

open("|-", "r+") do |child|
  if child
    # Proces-rodzic.
    child.puts("Witaj dziecko")       # Wysyanie do potomka.
    response = child.gets             # Odczyt z potomka.
    puts "Potomek mwi: #{response}"
  else
    # Proces-potomek.
    from_parent = gets                # Odczyt z rodzica.
    STDERR.puts "Rodzic mwi: #{from_parent}"
    puts("Cze mamo!")               # Wysyanie do rodzica.
  end
end

open("|-", "r") do |child|
  if child
    # Proces-rodzic.
    files = child.readlines   # Odczyt danych z potomka.
    child.close
  else
    # Proces-potomek.
    exec("/bin/ls", "-l")     # Uruchomienie czego jeszcze.
  end
end

trap "SIGINT" {
  puts "Ignoruj sygna SIGINT."
}

fail "Nieznana opcja #{switch}"

$SAFE=1                # Zwikszenie poziomu zabezpiecze.
$SAFE=4                # Ponowne zwikszenie poziomu zabezpiecze.
$SAFE=0                # SecurityError!  Tego nie wolno robi.

Thread.start {     # Utworzenie wtku penicego funkcj ograniczonego rodowiska wykonawczego.
  $SAFE = 4        # Ograniczenie wykonywania tylko w tym wtku.
  ...              # Niezaufany kod moe by wykonywany tutaj.
}

def safe_eval(str)
  Thread.start {            # Uruchomienie wtku sandboksu.
    $SAFE = 4               # Zwikszenie poziomu zabezpiecze.
    eval(str)               # Funkcja eval w sandboksie.
  }.value                   # Pobranie wyniku.
end
