in reply to Re: Re: Why doesn't % interpolate?
in thread Why doesn't % interpolate?

Lists don't interpolate. (How could they? They don't have names, let alone a sigil).

There's limited value in having hashes interpolate directly; it's not as useful as interpolation of scalars and arrays. It would be very annoying though, as you would not be able to write

printf "%d %s %f\n", $int, $str, $float;

because that would try to interpolate three hashes.

However, it's still relative simple to interpolate a hash:

print "@{[%hash]}";

Abigail

Replies are listed 'Best First'.
Re: Re: Why doesn't % interpolate?
by Anonymous Monk on Apr 19, 2003 at 20:16 UTC

    Given

    my $s = 'foo'; my @a = 1..10; my $h = 1..10; print "${s} @{a}"; # gives "foo 12345678910"

    Is there anything that would conflict with print "%{h}"; from producing the same output as print "@{[ %h ]}";?

      Given that "${s}" is the same as "$s" and "@{a}" is the same as "@a", then yes. It would mean that "%{f}" is the same as "%f", which would break a lot of code, even without considering printf formats.

      Abigail

        I'm not sure that follows. "is the same" for "${s}" & "@{a}" doesn't have to translate into "has to be the same" for "%{h}" does it? Perl has plenty on non-orthoganalities already.

        The "sigil{bareword}" syntax is specifically intended to disambiguate those cases where "sigil\w+" would be mis-interpreted

        my $a = $year < 1999 ? 'pre-' :'post-'; print "In the context of ${a}millenium treatment of dates, $year becam +e...";

        Are there any other cases that would need special treatment if "%h" was designated as being equivalent to "@{[ %h ]}" except when used with the format strings for (s)printf where it would be necessary to disambiguate it by using "%s %3d %{h}"? I can't think of any, can you?