# Documenting string

**URL:** <https://www.ruby-forum.com/t/documenting-string/192671>\
**Category:** Ruby\
**Created:** [August 3, 2010, 8:48pm UTC](https://www.ruby-forum.com/t/documenting-string/192671 "2010-08-03T20:48:22Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ciur\_Eugen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f1d935/32.png) [@Ciur\_Eugen](https://www.ruby-forum.com/u/Ciur_Eugen)\
**Post date:** [August 3, 2010, 8:48pm UTC](https://www.ruby-forum.com/t/documenting-string/192671/1 "2010-08-03T20:48:22Z")

</div>

Hi everyone,

Below is a short and functioning program:  
#!/usr/bin/ruby

def call\_me  
e = \<\<SOME

# 

# this is a nice string!

# 

SOME  
e  
end

puts call\_me  
It runs and displays string between SOME delimiters.  
My question is why, if I add to first # (between SOME delim), like this

#!/usr/bin/ruby

def call\_me  
e = \<\<SOME  
#@

# this is a nice string!

# 

SOME  
e  
end

puts call\_me

I got this error, in line with #@ sign:  
syntax error, unexpected $undefined

Does #@ sign have a special meaning in ruby?

---

<div class="post-metadata">

**Author:** ![Ciur\_Eugen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f1d935/32.png) [@Ciur\_Eugen](https://www.ruby-forum.com/u/Ciur_Eugen)\
**Post date:** [August 3, 2010, 9:00pm UTC](https://www.ruby-forum.com/t/documenting-string/192671/2 "2010-08-03T21:00:13Z")

</div>

I believe Ruby treats this as a double quoted string. The following  
seems to confirm that.

irb(main):001:0\> @cow = “bessie”  
=\> “bessie”  
irb(main):002:0\> e = \<\<SOME  
irb(main):003:0" #  
irb(main):004:0" # moo  
irb(main):005:0" #  
irb(main):006:0" SOME  
=\> “#\n# moo\n#\n”  
irb(main):007:0\> e  
=\> “#\n# moo\n#\n”  
irb(main):008:0\> e = \<\<SOME  
irb(main):009:0" #  
irb(main):010:0" #@cow  
irb(main):011:0" #  
irb(main):012:0" SOME  
=\> “#\nbessie\n#\n”

Looks like Ruby’s sees the start of an instance variable when it hits  
the “@”.

---

<div class="post-metadata">

**Author:** ![Ciur\_Eugen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f1d935/32.png) [@Ciur\_Eugen](https://www.ruby-forum.com/u/Ciur_Eugen)\
**Post date:** [August 3, 2010, 9:17pm UTC](https://www.ruby-forum.com/t/documenting-string/192671/3 "2010-08-03T21:17:40Z")

</div>

Oh, indeed “instance variable”!!  
and #@something inside doc string it sees live “#{@something}”!!!  
Thank you very much, Bob, now understand!

---

<div class="post-metadata">

**Author:** ![Ciur\_Eugen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f1d935/32.png) [@Ciur\_Eugen](https://www.ruby-forum.com/u/Ciur_Eugen)\
**Post date:** [August 4, 2010, 10:15am UTC](https://www.ruby-forum.com/t/documenting-string/192671/4 "2010-08-04T10:15:50Z")

</div>

Ciur Eugen wrote:

> Oh, indeed “instance variable”!!  
> and #@something inside doc string it sees live “#{@something}”!!!  
> Thank you very much, Bob, now understand!

And incidentally, you can change the semantics of heredocs to those of  
single-quoted strings by single-quoting the terminator. e.g.

def call\_me  
e = \<\<‘SOME’  
#@

# this is a nice string!

# 

SOME  
e  
end

puts call\_me

(But this won’t let you embed #{…} interpolation in your string  
either)

---

<div class="post-metadata">

**Author:** ![Ciur\_Eugen](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/f1d935/32.png) [@Ciur\_Eugen](https://www.ruby-forum.com/u/Ciur_Eugen)\
**Post date:** [August 4, 2010, 10:49am UTC](https://www.ruby-forum.com/t/documenting-string/192671/5 "2010-08-04T10:49:36Z")

</div>

Thank you Brian, that is really what I was looking for !
