---
name: "Perl::Critic::Policy::BuiltinFunctions::ProhibitLvalueSubstr"
section: "3pm"
platform: "linux"
package: "perl-perl-critic"
version: "1.156-3"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Perl::Critic::Policy::BuiltinFunctions::ProhibitLvalueSubstr"
---

# Perl::Critic::Policy::BuiltinFunctions::ProhibitLvalueSubstr(3pm)

Use 4-argument "substr" instead of writing "substr($foo, 2, 6) = $bar".

## NAME

Perl::Critic::Policy::BuiltinFunctions::ProhibitLvalueSubstr - Use 4-argument "substr" instead of writing "substr($foo, 2, 6) = $bar".

## AFFILIATION

This Policy is part of the core Perl::Critic distribution.

## DESCRIPTION

Conway discourages the use of `substr()` as an lvalue, instead recommending that the 4-argument version of `substr()` be used instead.

```
    substr($something, 1, 2) = $newvalue;     # not ok
    substr($something, 1, 2, $newvalue);      # ok
```

The four-argument form of `substr()` was introduced in Perl 5.005. This policy does not report violations on code which explicitly specifies an earlier version of Perl (e.g. `"use 5.004;"`).

## CONFIGURATION

This Policy is not configurable except for the standard options.

## SEE ALSO

"substr" in perlfunc (or `"perldoc -f substr"`).

"4th argument to substr" in perl5005delta

## AUTHOR

Graham TerMarsch \<graham@howlingfrog.com\>

## COPYRIGHT

Copyright (c) 2005-2011 Graham TerMarsch.  All rights reserved.

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