---
title: "Anatomy of a Perl Script"
canonical: "https://docs.infoblox.com/space/NetMRI753/42141433/Anatomy%20of%20a%20Perl%20Script"
format: markdown
---
> ⚠️ **Note**
> ⚠️ 
> ⚠️ Well-known variables for Perl and CCS scripting are listed in the topic *<span style="color: #0000ff">[Scripting](https://infoblox-docs.atlassian.net/wiki/spaces/NetMRI753/pages/42403211)</span>*[ ](https://infoblox-docs.atlassian.net/wiki/spaces/NetMRI753/pages/42403211)*<span style="color: #0000ff">[Well-Known](https://infoblox-docs.atlassian.net/wiki/spaces/NetMRI753/pages/42403211)</span>*[ ](https://infoblox-docs.atlassian.net/wiki/spaces/NetMRI753/pages/42403211)*<span style="color: #0000ff">[Variables](https://infoblox-docs.atlassian.net/wiki/spaces/NetMRI753/pages/42403211)</span>*[ ](https://infoblox-docs.atlassian.net/wiki/spaces/NetMRI753/pages/42403211)*<span style="color: #0000ff">[(Perl, Python, ](https://infoblox-docs.atlassian.net/wiki/spaces/NetMRI753/pages/42403211)</span>**<span style="color: #0000ff">[and](https://infoblox-docs.atlassian.net/wiki/spaces/NetMRI753/pages/42403211)</span>*[ ](https://infoblox-docs.atlassian.net/wiki/spaces/NetMRI753/pages/42403211)*<span style="color: #0000ff">[CCS)](https://infoblox-docs.atlassian.net/wiki/spaces/NetMRI753/pages/42403211)</span>*.

Perl scripts use a script header similar to a CCS script, contained within a well-known comment block. The script header block influences a number of runtime behaviors, including:

**Script-Timeout**

Specifies the per-command timeout for the entire script in seconds.

- Type: Integer
- Required: No
- Default if not specified: 60

**Script-Login**

Specifies whether the job engine should automatically establish a connection with the target device.

- Type: Boolean
- Required: No
- Default if not specified: true

**Script-Variables**

Specifies inputs needed by the script.

- Type: Tuple (ordered list of elements)
- Required: No
- Default if not specified: None

**Script-Filter**

Specifies the device types processed by the script.

- Type: String
- Required: Yes

A Perl Script header block must be defined inside of Perl comments within a "well known" comment section (between BEGIN-SCRIPT-BLOCK and a # END-SCRIPT-BLOCK). The following example demonstrates the difference between a CCS and Perl Script header block that specifies a Script-Filter that applies to all Cisco IOS devices.

As a comparison, a CCS implementation is straightforward:

`Script-Filter:$Vendor == "Cisco" and $sysDesc like /IOS/`

You can filter by the network view:

`Script-Filter:$network == "blue"`

A comparable Perl implementation is as follows:

`BEGIN-SCRIPT-BLOCK`

`Script-Filter:$Vendor == "Cisco" and $sysDesc like /IOS/`

`END-SCRIPT-BLOCK`

Perl scripts run inside the sandbox, using the Perl API to communicate with the Device Interaction Server (DIS) on NetMRI. The DIS proxies CLI requests/responses to/from network devices on behalf of the Perl scripts. Before commands can be sent to a network device, a Perl script must first establish a DIS session (see v2 API object DisSession). After a session has been established, a CLI connection with the target device must be established for the given session (see v2 API object CliConnection). The majority of the time, a Perl script will follow this same initialization sequence. First, establish the API session, establish the DIS session, then establish a CLI connection with the target device. For this reason, Infoblox_Job.pm, a pre-installed Perl library, is provided in the appliance (see **Configuration**** Management **>** Job**** Management **>** Library **>** Infoblox_Job**).