Note: you didn't explicitely mention this, so I will: the DATA handle belongs to the package the end of the source file is in. For your script, that would be main::DATA. In case your proposed mechanism would have worked, it'd still have gotten broken if you had a package statement before the end of the script.
Now, as for alternatives: you could add an explicit sub call that gets the data. It works, but doesn't look all that nice:
# The module: package Foo; sub get { my($caller) = caller; no strict 'refs'; local $/; scalar readline "$caller\::DATA"; } 1; # The main script: use Foo; print Foo->get; __DATA__ Whatever you want...
As an alternative idea, you can use a here-doc instead of a DATA section. That way you can do it while importing. Like this:
package Foo; sub import { shift; my($caller) = caller; no strict 'refs'; ${"$caller\::foo"} = shift; } 1; # The main script: use Foo << '_*_'; This is my data over two lines! _*_ print "\$foo = '$foo'\n";
In reply to Re: Getting the DATA section of one module in the import() of another
by bart
in thread Getting the DATA section of one module in the import() of another
by princepawn
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |