jiwei800715 has asked for the wisdom of the Perl Monks concerning the following question:

use FileHandle::Rollback; my $INDEXFILE_M; $INDEXFILE_M=&abc(); $INDEXFILE_M->commit();#error sub abc{ my $INDEXFILE = FileHandle::Rollback->new("< a.txt") or die "cannot op +en filehandle: $!"; select($INDEXFILE); print "AAAA"; return \*$INDEXFILE; }
I use FileHandle::Rollback to read and write file,because of its function of rollback. Now I want to let a sub return the obj(FileHandle::Rollback) refference, and I can call commit() in main sub. but it seems cannot run. abc sub can return a filehandle but can not call commit(),why is it? error message Can't call method "commit" on an undefined value at D:/Program Files/perl/site/lib/FileHandle/Rollback.pm line 188. at D:/Program Files/perl/site/lib/FileHandle/Rollback.pm line 188 FileHandle::Rollback::commit('FileHandle::Rollback=GLOB(0x1df63e4)') called at D:/HF_project_perl/V3.0/darft.pl line 8

Replies are listed 'Best First'.
Re: Is it a filehandle or a obj refference?
by Corion (Patriarch) on Mar 27, 2009 at 08:11 UTC

    $INDEXFILE is a lexical variable, and you're not returning that lexical variable but a reference to the global glob referenced by the string version of $INDEXFILE. That's most likely not what you want. Just return $INDEXFILE instead.

    Of course, it would have helped us help you better if you had shown us the actual error message you got.

      I think the OP did contain the actual error, Corion ... it's just that, since it was unformatted, it isn't easy to spot - it's the line noise beginning at Can't call method "commit"....

      A user level that continues to overstate my experience :-))