http://qs321.pair.com?node_id=291312


in reply to Printing values from references

Greetings fuzzyping,

Pardon the rough nature of this code, but take a look at this:

#!/usr/bin/perl use strict; use warnings; package Thing; sub stuff { return 'word'; } sub new { return bless {}, shift; } package main; my $thing = new Thing; print $thing->stuff, "\n"; print "$thing->stuff\n"; print $thing, "\n";

When you put $thing->stuff into quotes, Perl interprets only the $thing instead of the whole line. One solution is to do exactly what you've done which is to not put the $thing->stuff inside quotes. I remember seeing a way to get Perl to interpret the whole $thing->stuff inside a double-quote, but I never use it, so I can't remember the exact syntax right now.

gryphon
code('Perl') || die;

Replies are listed 'Best First'.
Re: Re: Printing values from references
by fuzzyping (Chaplain) on Sep 13, 2003 at 23:57 UTC
    That sounds about right. The only problem is that I can't leave it outside the quotes**, since it's going to be in a system() call for the real script. If anyone can remember how to escape a full reference string like that, I'd be very grateful.

    ** Of course, I can simply read the value into a scalar variable and put that into the system() call, but it seems so inefficient. :)

    -fp

      Perhaps you're thinking of something along the lines of:

      system "frobnitz --oik @{[ $something->method ]}"

      Of course some would consider that uglier than a temporary. Also remember that system() will take a list just fine (presuming you're not dependent on it being passed to a shell for redirection or what not).

        Good call, on both points. That works, but you're right... it's ugly and very unintuitive. I think I'll just use the temp as you've suggested. Thanks!

        -fp

      Greetings fuzzyping,

      So why not just do the following?

      system('cmd_line stuff ' . $part->bodyhandle->path . ' and_stuff');

      gryphon
      code('Perl') || die;