Heredoc and array / hash construction syntax error

Discussion in 'Ruby' started by David Tran, Mar 16, 2005.

  1. David Tran

    David Tran Guest

    My question is how can you construct a "heredoc array" ( or hash).

    Let me start with is code:
    a = [
    1,
    2
    ]

    it is perfect ruby syntax.

    but if you put the ',' on next line like:
    a = [
    1
    ,
    2
    ]
    then you got syntax error.

    It seems stupid to put ',' on next line but I have no choice,
    here is my use case with heredoc example:
    a = [
    <<EOD1
    abc
    very very long string and many many lines ...
    EOD1
    ,
    <<EOD2
    123
    very very long string and many many lines ...
    EOD2
    ]

    I cannot put the ',' just after EOD1, it must to the next line,
    if not, the "EOD1," is not consider termination of heredoc.
    but put the ',' on next line then I got syntax error ...


    How do you resolve this problem?

    Thank you.
     
    David Tran, Mar 16, 2005
    #1
    1. Advertising

  2. On Thu, 17 Mar 2005 07:19:41 +0900, David Tran <> wrote:
    > My question is how can you construct a "heredoc array" ( or hash).
    >
    > Let me start with is code:
    > a = [
    > 1,
    > 2
    > ]
    >
    > it is perfect ruby syntax.
    >
    > but if you put the ',' on next line like:
    > a = [
    > 1
    > ,
    > 2
    > ]
    > then you got syntax error.
    >
    > It seems stupid to put ',' on next line but I have no choice,
    > here is my use case with heredoc example:
    > a = [
    > <<EOD1
    > abc
    > very very long string and many many lines ...
    > EOD1
    > ,
    > <<EOD2
    > 123
    > very very long string and many many lines ...
    > EOD2
    > ]
    >
    > I cannot put the ',' just after EOD1, it must to the next line,
    > if not, the "EOD1," is not consider termination of heredoc.
    > but put the ',' on next line then I got syntax error ...
    >
    > How do you resolve this problem?
    >
    > Thank you.
    >
    >


    Depending on what the test is, a %Q{ } pair might work better. You
    will have to escape any '}'.

    a = [
    %Q{\
    Multi line
    white space is kept.
    My here doc clone "can have quotes" 'of' any kind.},

    %Q{\
    just remember to use a \} to close
    your text}
    ]

    Personally, I don't care for heredoc format so i don't use it often.

    Brian.
     
    Brian Mitchell, Mar 16, 2005
    #2
    1. Advertising

  3. David Tran

    Eric Hodel Guest

    --Apple-Mail-9--438143558
    Content-Transfer-Encoding: 7bit
    Content-Type: text/plain; charset=US-ASCII; format=flowed


    On 16 Mar 2005, at 14:19, David Tran wrote:

    > My question is how can you construct a "heredoc array" ( or hash).
    >
    > Let me start with is code:
    > a = [
    > 1,
    > 2
    > ]
    >
    > it is perfect ruby syntax.
    >
    > but if you put the ',' on next line like:
    > a = [
    > 1
    > ,
    > 2
    > ]
    > then you got syntax error.
    >
    > It seems stupid to put ',' on next line but I have no choice,
    > here is my use case with heredoc example:


    Like this:

    $ ruby
    a = [
    <<EOD,
    abc
    stuff
    EOD
    ]

    --
    Eric Hodel - - http://segment7.net
    FEC2 57F1 D465 EB15 5D6E 7C11 332A 551C 796C 9F04

    --Apple-Mail-9--438143558
    content-type: application/pgp-signature; x-mac-type=70674453;
    name=PGP.sig
    content-description: This is a digitally signed message part
    content-disposition: inline; filename=PGP.sig
    content-transfer-encoding: 7bit

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.2.4 (Darwin)

    iD8DBQFCOLayMypVHHlsnwQRAierAJwPcQi009uxX1J51q/iN2l7HSlKpwCdHvoR
    MX5/I6qMRy7+VbM2HW+0n4M=
    =AWJl
    -----END PGP SIGNATURE-----

    --Apple-Mail-9--438143558--
     
    Eric Hodel, Mar 16, 2005
    #3
  4. David Tran

    T55555 Guest

    > Like this:
    >
    > $ ruby
    > a = [
    > <<EOD,
    > abc
    > stuff
    > EOD
    > ]


    It works.
    Thanks Eric.
     
    T55555, Mar 17, 2005
    #4
  5. David Tran

    Relm Guest

    On Thu, 17 Mar 2005, David Tran wrote:

    > It seems stupid to put ',' on next line but I have no choice,
    > here is my use case with heredoc example:
    > a = [
    > <<EOD1
    > abc
    > very very long string and many many lines ...
    > EOD1
    > ,
    > <<EOD2
    > 123
    > very very long string and many many lines ...
    > EOD2
    > ]
    >
    > I cannot put the ',' just after EOD1, it must to the next line,
    > if not, the "EOD1," is not consider termination of heredoc.
    > but put the ',' on next line then I got syntax error ...


    It may be more readable to put the expression on one line with all the
    heredocs stacked beneath:

    a = [<<EOD1, <<EOD2]
    abc
    very very long string and many many lines ...
    EOD1
    123
    very very long string and many many lines ...
    EOD2

    --
    Relm
     
    Relm, Mar 17, 2005
    #5
  6. "Relm" <> schrieb im Newsbeitrag
    news:pine.LNX.4.21.0503170235060.3371-100000@frieza...
    > On Thu, 17 Mar 2005, David Tran wrote:
    >
    > > It seems stupid to put ',' on next line but I have no choice,
    > > here is my use case with heredoc example:
    > > a = [
    > > <<EOD1
    > > abc
    > > very very long string and many many lines ...
    > > EOD1
    > > ,
    > > <<EOD2
    > > 123
    > > very very long string and many many lines ...
    > > EOD2
    > > ]
    > >
    > > I cannot put the ',' just after EOD1, it must to the next line,
    > > if not, the "EOD1," is not consider termination of heredoc.
    > > but put the ',' on next line then I got syntax error ...

    >
    > It may be more readable to put the expression on one line with all the
    > heredocs stacked beneath:
    >
    > a = [<<EOD1, <<EOD2]
    > abc
    > very very long string and many many lines ...
    > EOD1
    > 123
    > very very long string and many many lines ...
    > EOD2


    This works also:

    a = [
    <<EOD1,
    abc
    very very long string and many many lines ...
    EOD1
    <<EOD2,
    123
    very very long string and many many lines ...
    EOD2
    ]

    Note: "<<EOD1" is the expression that is replaced by the string, hence the
    "," directly after it.

    Kind regards

    robert
     
    Robert Klemme, Mar 17, 2005
    #6
  7. David Tran

    Eric Hodel Guest

    --Apple-Mail-14--370089524
    Content-Transfer-Encoding: 7bit
    Content-Type: text/plain; charset=US-ASCII; format=flowed

    On 17 Mar 2005, at 03:16, Relm wrote:

    > It may be more readable to put the expression on one line with all the
    > heredocs stacked beneath:


    I find that type of code gives me rather intense feelings of disgust
    and loathing.

    I found such an example in mkmf.rb and it was quite confusing to me,
    because the first here-doc terminators were nearly indistinguishable
    from the rest of the contents of the file.

    The biggest problem with beginning multiple here-docs on a single line
    is that you can have no whitespace between the end of the first and the
    beginning of the second unless that whitespace is supposed to be in the
    here-docs.

    --
    Eric Hodel - - http://segment7.net
    FEC2 57F1 D465 EB15 5D6E 7C11 332A 551C 796C 9F04

    --Apple-Mail-14--370089524
    content-type: application/pgp-signature; x-mac-type=70674453;
    name=PGP.sig
    content-description: This is a digitally signed message part
    content-disposition: inline; filename=PGP.sig
    content-transfer-encoding: 7bit

    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.2.4 (Darwin)

    iD8DBQFCOcCJMypVHHlsnwQRAuIOAKD45BDJSLk3VELycooIr9oaN9V/LwCfa1ut
    l1Gc76HECmaIiquEduYHKX8=
    =Xpym
    -----END PGP SIGNATURE-----

    --Apple-Mail-14--370089524--
     
    Eric Hodel, Mar 17, 2005
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. flupke

    heredoc and variables

    flupke, Jun 4, 2004, in forum: Python
    Replies:
    7
    Views:
    3,375
    =?ISO-8859-1?Q?Xavier_Mart=EDnez?=
    Jun 7, 2004
  2. Ook
    Replies:
    10
    Views:
    576
  3. rp
    Replies:
    1
    Views:
    580
    red floyd
    Nov 10, 2011
  4. Replies:
    3
    Views:
    181
    Wolfgang NĂ¡dasi-Donner
    Jan 27, 2007
  5. Srijayanth Sridhar
    Replies:
    19
    Views:
    668
    David A. Black
    Jul 2, 2008
Loading...

Share This Page