1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
=begin
IDENTIFIER whitespaceopt1 '<<' whitespaceopt2 (IDENTIFIER | string)
1. not whitespace1 or whitespace2 => left shift
2. IDENTIFIER is local variable => left shift
3. here-doc
see http://seclib.blogspot.com/2005/11/more-on-leftshift-and-heredoc.html
=end
HEREDOC = 1
def function(*a) print "F:"; a end
def both(*a) print "B:"; a end
var = 0
both = 0
# whitespace
print function<<HEREDOC
puts "shift"
HEREDOC
# whitespace
print function << HEREDOC
puts "shift"
HEREDOC
# whitespace
print function<< HEREDOC
puts "shift"
HEREDOC
# "function" not a local
print function <<HEREDOC
puts "heredoc"
HEREDOC
# "var" is a local
print var <<HEREDOC
puts "shift"
HEREDOC
# "both" is a local
print both <<HEREDOC
puts "shift"
HEREDOC
|