Cool. Somehow, though It seems {6 * 1 == 12 / 2}-ish. By the time the variable is effectively accessed, the text is there.
I never said that it was usefull ;-)
Greetings! E:\d_drive\perlStuff>perl open IN, 'some_nonexistent_filename' or print $!; ^Z No such file or directory
What is intriguing to me in this is that an overloaded operator wouuld be attched to a variable. this sounds like it gets into prtions of Perl that I've never really delved into. Is $! actually sored as a number?
As John pointed out, it is stored as both a number and a string. Here is a small example of how you can do something similar in your own code. See 'perldoc overload' for more info.
#!/usr/bin/perl
package NumStr;
use strict; use warnings;
use overload '""' => \&stringify, '0+' => \&numify, fallback => 1;
sub new { my ($class, $num, $str) = @_; return bless { num => $num || 0, str => $str || '', }, $class }
sub numify { my $self = shift; return $self->{num}; }
sub stringify { my $self = shift; return $self->{str}; }
package main;
use strict; use warnings;
my $ns = NumStr->new(42, 'The Answer to Life, the Universe, and Everything');
printf("as number = '%d', as string = '%s'\n", $ns, $ns);
__END__
You can simulate more closely with XS:
#include "EXTERN.h" #include "perl.h" #include "XSUB.h"
int _get(pTHX_ SV *sv, MAGIC *mg) { /* IF this is a std error lookup get errno and store in NV slot, then call strerror and store in PV slot. ELSE a custom error has been stored; do nothing END */ return 1; }
int _set(pTHX_ SV *sv, MAGIC *mg) { /* store custom errno in NV slot set global flag so _get() knows this is not a std error lookup */ return 1; }
MODULE = StrError PACKAGE = StrError
void create(num, str) SV *num; SV *str; PREINIT: SV *sv; MAGIC *mg; CODE: sv = get_sv("StrError", TRUE); /* creates $main::StrError */
sv_magic(sv, 0, '\0', "StrError", 8);
mg = mg_find(sv, '\0'); if (mg != NULL) { mg->mg_virtual->svt_get = &_get; mg->mg_virtual->svt_set = &_set; }
sv_setnv(sv, SvNV(num)); sv_setpv(sv, SvPV_nolen(str)); SvNOK_on(sv);
-- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>