develooper Front page | perl.vmsperl | Postings from January 2002

Re: PERL and RMS interface

Thread Previous | Thread Next
From:
d.webb
Date:
January 19, 2002 06:46
Subject:
Re: PERL and RMS interface
Message ID:
01KD9C6RZUGG8Y52O5@mdx.ac.uk
> Hello All!
> 	Is there a .PM to get interface with RMS ?


Well there is VMS-INDEXEDFILE-0_02

From the readme :-


This used to be called VMDBM, and was repackaged in the VMS::
namespace in April 1999.

DESCRIPTION
-----------
   This is a module for VMS Perl which implements DBM-like functionality
   using OpenVMS RMS Indexed files.

This seems to work very well.

The following is an example perl cgi script which creates an indexed file,
writes and reads records from it :-

#! perl


use VMS::IndexedFile;

print "Content-type: text/plain\n\n";

# Create a file test.dat
# Variable record format - maximum record size 10 characters
# Primary key (Key 0) - starting position 0 , length 3  - character string
# Second Index (Key 1) - consists of two key segments :
#        segment 0 : starting position 3 , length 2  - character string
#        segment 1 : starting position 0 , length 3  - character string

$hobj = tie(%h,VMS::IndexedFile,"test.dat",0,O_RDWR|O_CREAT,
      "FILE; ORGANIZATION indexed; RECORD; CARRIAGE_CONTROL carriage_return;" .
      "FORMAT variable; SIZE 10;" .
      "KEY 0; CHANGES no; DUPLICATES no;  SEG0_POSITION 0; SEG0_LENGTH 3;" .
        "TYPE string;" .
      "KEY 1; CHANGES no; DUPLICATES yes; SEG0_POSITION 3; SEG0_LENGTH 2;" .
        "SEG1_POSITION 0; SEG1_LENGTH 3; TYPE string;");

# open second connection to file using secondary key

tie(%h2,VMS::IndexedFile,"test.dat",1)
  or die "Can't open test.dat file: $!\n";



# store a record with primary key 'ABC' + some other data

$h{'ABC'} = 'ABC12345';

# Primary key for record is "ABC"
# Secondary key for record is  "12ABC"

# store another record with primary key 'DLW' + some other data

$h{'DLW'} = 'DLWMDX';

# Primary key for record is "DLW"
# Secondary key for record is  "MDDLW"


$h{'DLX'} = 'DLX012345';

# Primary key for record is "DLX"
# Secondary key for record is  "01DLX"

# Print record with secondary key MDDLW

print "\n\n The record with secondary key MDDLW is :- \n\n";

print $h2{'MDDLW'};


# Print record with primary key ABC

print "\n\n The record with primary key ABC is :- \n\n";

print $h{'ABC'};

# close the connections

untie(%h);
untie(%h2);

# reopen connections again so as to reposition at start of each index

tie(%h,VMS::IndexedFile,"test.dat",0)
  or die "Can't open test.dat file: $!\n";

tie(%h2,VMS::IndexedFile,"test.dat",1)
  or die "Can't open test.dat file: $!\n";


# Print all records by  primary key

print "\n\n The records in primary key order are :- \n\n";

while($recval = $h{''}) {print "$recval\n";}

# Print all records by  secondary key
print "\n\n The records in secondary key order are :- \n\n";

while($recval = $h2{''}) {print "$recval\n";}


# close the connections

untie(%h);
untie(%h2);



This works fine using perl v5.6.0 with the crinoid perl server addon to the
OSU webserver under Alpha VMS 7.3.


There is one problem you can't delete the file you create from within the 
script after you have finished.

Also although the readme provides instructions on how to use the module there
is no documentation setup for perldoc to read.

(I would quite like to convert the readme into a perldoc documentation file and 
setup such documentation on my system but have no idea how to go about it).

David Webb
VMS and Unix team leader
CCSS
Middlesex University

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About