---
name: "PerlIO::via::dynamic"
section: "3pm"
platform: "linux"
package: "perlio-via-dynamic"
version: "0.14-14"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/PerlIO::via::dynamic"
---

# PerlIO::via::dynamic(3pm)

dynamic PerlIO layers

## NAME

PerlIO::via::dynamic - dynamic PerlIO layers

## SYNOPSIS

```
 open $fh, $fname;
 $p = PerlIO::via::dynamic->new
  (translate =>
    sub { $_[1] =~ s/\$Filename[:\w\s\-\.\/\\]*\$/\$Filename: $fname\$/e},
   untranslate =>
    sub { $_[1] =~ s/\$Filename[:\w\s\-\.\/\\]*\$/\$Filename\$/});
 $p->via ($fh);
 binmode $fh, $p->via; # deprecated
```

## DESCRIPTION

`"PerlIO::via::dynamic"` is used for creating dynamic PerlIO layers. It is useful when the behavior or the layer depends on variables. You should not use this module as via layer directly (ie :via(dynamic)).

Use the constructor to create new layers, with two arguments: translate and untranslate. Then use `"$p-"`via ($fh)\> to wrap the handle.  Once \<$fh\> is destroyed, the temporary namespace for the IO layer will be removed.

Note that PerlIO::via::dynamic uses the scalar fields to reference to the object representing the dynamic namespace.

## OPTIONS

- translate

  A function that translate buffer upon *write*.

- untranslate

  A function that translate buffer upon *read*.

- use\_read

  Use `"READ"` instead of `"FILL"` for the layer.  Useful when caller expect exact amount of data from read, and the `"untranslate"` function might return different length.

  By default `"PerlIO::via::dynamic"` creates line-based layer to make `"translate"` implementation easier.

## AUTHORS

Chia-liang Kao \<clkao@clkao.org\>

## COPYRIGHT

Copyright 2004 by Chia-liang Kao \<clkao@clkao.org\>.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

See \<http://www.perl.com/perl/misc/Artistic.html\>
