Perl::...tStdin(3pm)

πŸŽ€ NAME πŸŽ€

Okay bestie, this is Perl::...tStdin(3pm) β€” the manual page for Perl::Critic::Policy::InputOutput::ProhibitExplicitStdin. The whole vibe? Use <> or <ARGV> or a prompting module instead of <STDIN>. Periodt. πŸ’…


🌸 AFFILIATION 🌸

This Policy is part of the core Perl::Critic distribution. Yup, it ships with the main character energy. ✨


πŸ¦‹ DESCRIPTION πŸ¦‹

Okay so here's the lore, bestie: Perl has a useful magic filehandle called *ARGV that checks the command line and if there are any arguments, opens and reads those as files. If there are no arguments, *ARGV behaves like *STDIN instead. That's the plot twist. 🫢

This behavior is almost always what you want if you want to create a program that reads from STDIN. This is often written in one of the following two equivalent forms:

  while (<ARGV>) {
    # ... do something with each input line ...
  }
  # or, equivalently:
  while (<>) {
    # ... do something with each input line ...
  }

If you want to prompt for user input, try special purpose modules like IO::Prompt. It's giving "there's a module for that" energy. πŸŽ€


πŸŽ€ CONFIGURATION πŸŽ€

No extra knobs, no secret switches, no little config arc. This Policy is not configurable except for the standard options. That's the whole story. πŸ’…


πŸ’€ CAVEATS πŸ’€

Okay, important caveat time β€” pay attention, bestie. Due to a bug in the current version of PPI (v1.119_03) and earlier, the readline operator is often misinterpreted as less-than and greater-than operators after a comma. So this policy misses important cases like:

my $content = join '', <STDIN>;

because it interprets that line as the nonsensical statement:

my $content = join '', < STDIN >;

When that PPI bug is fixed, this policy should start catching those violations automatically. So like, it's not you, it's the parser. 😭


πŸ‘‘ CREDITS πŸ‘‘

Initial development of this policy was supported by a grant from the Perl Foundation. Shoutout to them, no cap. 🫢


🫢 AUTHOR 🫢

Chris Dolan <cdolan@cpan.org> β€” iconic behavior, honestly. πŸ’–


Copyright (c) 2007-2023 Chris Dolan

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The full text of this license can be found in the LICENSE file included with this module

Mwah πŸ’‹ β€” this page came from perl v5.42.0, dated 2024-10-23. Bye bestie! πŸŽ€βœ¨

πŸ“¦ where this page comes from