OS390-Stdio
view release on metacpan or search on metacpan
approximated by the names of the elements of the C<fldata_t> struct (see the
documentaton for the C<fldata()> C RTL routine for further information).
For example:
use OS390::Stdio qw(get_dcb);
my %slate_dcb = get_dcb("//SEDIMENT.SLATE");
for (sort(keys(%slate_dcb))) {
print "$_ = $slate_dcb{$_}\n";
}
For an example using the older data set handle mechanism:
use OS390::Stdio qw(mvsopen get_dcb);
my $dshandle = mvsopen("//SEDIMENT.SLATE","r");
my %slate_dcb = get_dcb($dshandle);
close($dshandle);
for (sort(keys(%slate_dcb))) {
print "$_ = $slate_dcb{$_}\n";
}
For the inverse (i.e. setting data set attributes) use appropriate
arguments with either C<mvsopen>, C<dynalloc>, or C<svc99>. For just
the filename you can use C<getname> in place of C<get_dcb>.
=item getname NAME
=item getname DSH
The C<getname> function returns the full data set filename associated
either with the given name or with a supplied Perl I/O handle
(via C<fldata()>). If an error occurs, it returns C<undef>.
As an example consider:
$fullname = getname("//FOO.BAR");
$hlq = $fullname;
$hlq =~ s/\'([^\.]+)\..*/$1/; # strip leading ' and trailing DS names
print "The high level qualifier (HLQ) is $hlq\n";
The version of that previous example carried out with a Data Set Handle
might appear as:
$dshandle = mvsopen("//FOO.BAR","r");
$fullname = getname($dshandle);
$hlq = $fullname;
$hlq =~ s/\'([^\.]+)\..*/$1/; # strip leading ' and trailing DS names
print "The high level qualifier (HLQ) is $hlq\n";
or, assuming you are authorized to do so, in order to switch
to a different HLQ:
$mydshandle = mvsopen("//FOO.BAR","r");
$myfullname = getname($mydshandle);
$bobsuid = '214';
setuid($bobsuid);
$bobsdshandle = mvsopen("//FOO.BAR","r");
$bobsfullname = getname($bobsdshandle);
$bobshlq = $bobsfullname;
$bobshlq =~ s/\'([^\.]+)\..*/$1/;
print "Bob's pwname is ",(getpwuid($<))[0],"\n";
print "Bob's high level qualifier (HLQ) is $bobshlq\n";
Note that both of these examples assume that UIDs map directly to
profile prefixes, whereas they may not in general. To obtain more
extensive information for a given data set handle see C<get_dcb>.
=item mvsopen NAME MODE
The C<mvsopen> function enables you to specify optional arguments
to the CRTL when opening a data set. Its operation is similar to the
built-in Perl C<open> function (see L<perlfunc> for a complete description),
but it will only open normal data sets; it cannot open pipes or duplicate
existing I/O handles. The C<MODE> is typically taken from:
qw(r w a r+ w+ a+ rb wb ab rt wt at rb+ wb+ ab+ rt+ wt+ at+)
Additional C<MODE> keyword parameters can be passed from:
qw(acc= blksize= byteseek lrecl= recfm= type= asis password= noseek)
(See the B<C/C++ MVS Programming Guide> and the
B<C/C++ Run-Time Library Reference> descriptions of C<fopen()> for detailed
information on C<NAME> and C<MODE> arguments.) If successful, C<mvsopen>
returns a data set handle; if an error occurs, it returns C<undef>.
You can use the data set handle returned by C<mvsopen> just as you
would any other Perl file handle. The class OS390::Stdio ISA
IO::File, so you can call IO::File methods using the handle
returned by C<mvsopen>. However, C<use>ing OS390::Stdio does not
automatically C<use> IO::File; you must do so explicitly in
your program if you want to call IO::File methods. This is
done to avoid the overhead of initializing the IO::File package
in programs which intend to use the handle returned by C<mvsopen>
as a normal Perl data set handle only. When the scalar containing
a OS390::Stdio data set handle is overwritten, C<undef>d, or goes
out of scope, the associated data set is closed automatically.
=item mvswrite DSH EXPR LEN
The C<mvswrite> function provides access to stdio's C<fwrite()> function.
For example:
use OS390::Stdio qw(mvsopen mvswrite);
my $dshandle = mvsopen("//BED.ROCK","w+");
my $fred,$data,$chrs_written;
$fred = 100.00;
$data = sprintf("Fred's salary is \$%3.2f",$fred);
$chrs_written = mvswrite($dshandle,$data,length($data));
close($dshandle);
=item pds_mem NAME
=item pds_mem NAME, FLAG
Returns a list of members for the named PDS directory. Alias names
may be returned depending on the value of the optional
FLAG argument:
FLAG pds_mem() returns
member names (if any) - this is the default
( run in 2.629 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )