---
name: "Net::Z3950::GRS1"
section: "3pm"
platform: "linux"
package: "libnet-z3950-simpleserver-perl"
version: "1.29-1+b1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Net::Z3950::GRS1"
---

# Net::Z3950::GRS1(3pm)

Perl package used to encode GRS-1 records.

## NAME

Net::Z3950::Record::GRS1 - Perl package used to encode GRS-1 records.

## SYNOPSIS

```
  use Net::Z3950::GRS1;
  my $a_grs1_record = new Net::Z3950::Record::GRS1;
  my $another_grs1_record = new Net::Z3950::Record::GRS1;
  $a_grs1_record->AddElement($type, $value, $content);
  $a_grs1_record->Render();
```

## DESCRIPTION

This Perl module helps you to create and manipulate GRS-1 records (generic record syntax). So far, you have only access to three methods:

### new

Creates a new GRS-1 object,

```
  my $grs1 = new Net::Z3950::GRS1;
```

### AddElement

Lets you add entries to a GRS-1 object. The method should be called this way,

```
  $grs1->AddElement($type, $value, $which, $content);
```

where `$type` should be an integer, and `$value` is free text. The `$which` argument should contain one of the constants listed in Appendix A. Finally, `$content` contains the "thing" that should be stored in this entry. The structure of `$content` should match the chosen element data type. For

```
  $which == Net::Z3950::GRS1::ElementData::String;
```

`$content` should be some kind of scalar. If on the other hand,

```
  $which == Net::Z3950::GRS1::ElementData::Subtree;
```

`$content` should be a GRS1 object.

### Render

This method digs through the GRS-1 data structure and renders the record. You call it this way,

```
  $grs1->Render();
```

If you want to access the rendered record through a variable, you can do it like this,

```
  my $record_as_string;
  $grs1->Render(POOL => \$record_as_string);
```

If you want it stored in a file, Render should be called this way,

```
  $grs1->Render(FILE => 'record.grs1');
```

When no file name is specified, you can choose to stream the rendered record, for instance,

```
  $grs1->Render(HANDLE => *STDOUT);             ## or
  $grs1->Render(HANDLE => *STDERR);             ## or
  $grs1->Render(HANDLE => *MY_HANDLE);
```

### Hash2grs

This method converts a hash into a GRS-1 object. Scalar entries within the hash are converted into GRS-1 string elements. A hash entry can itself be a reference to another hash. In this case, the new referenced hash will be converted into a GRS-1 subtree. The method is called this way,

```
  $grs1->Hash2grs($href, $mapping);
```

where `$href` is the hash to be converted and `$mapping` is referenced hash specifying the mapping between keys in `$href` and (type, value) pairs in the `$grs1` object. The `$mapping` hash could for instance look like this,

```
  my $mapping = {
                        title   =>      [2, 1],
                        author  =>      [1, 1],
                        issn    =>      [3, 1]
                };
```

If the `$grs1` object contains data prior to the invocation of Hash2grs, the new data represented by the hash is simply added.

## APPENDIX A

These element data types are specified in the Z39.50 protocol:

```
  Net::Z3950::GRS1::ElementData::Octets
  Net::Z3950::GRS1::ElementData::Numeric
  Net::Z3950::GRS1::ElementData::Date
  Net::Z3950::GRS1::ElementData::Ext
  Net::Z3950::GRS1::ElementData::String                 <---
  Net::Z3950::GRS1::ElementData::TrueOrFalse
  Net::Z3950::GRS1::ElementData::OID
  Net::Z3950::GRS1::ElementData::IntUnit
  Net::Z3950::GRS1::ElementData::ElementNotThere
  Net::Z3950::GRS1::ElementData::ElementEmpty
  Net::Z3950::GRS1::ElementData::NoDataRequested
  Net::Z3950::GRS1::ElementData::Diagnostic
  Net::Z3950::GRS1::ElementData::Subtree                <---
```

Only the '\<---' marked types are so far supported in this package.

## AUTHOR

Anders Sønderberg Mortensen \<sondberg@indexdata.dk\> Index Data ApS, Copenhagen, Denmark. 2001/03/09

## SEE ALSO

Specification of the GRS-1 standard, for instance in the Z39.50 protocol specification.
