File::F...xtending(3)

🌸 NAME 🌸

okay bestie, welcome to File::F...xtending(3) from the User Contributed Perl Documentation. This page is all about File::Find::Rule::Extending β€” the mini-guide to extending File::Find::Rule. It's the little how-to for making your own extension without getting tangled up. πŸ’…

✨ SYNOPSIS ✨

Here's the whole snack in code form:

package File::Find::Rule::Random;
use strict;

# take useful things from File::Find::Rule
use base 'File::Find::Rule';

# and force our crack into the main namespace
sub File::Find::Rule::random () {
    my $self = shift()->_force_object;
    $self->exec( sub { rand > 0.5 } );
}

1;

πŸ’– DESCRIPTION πŸ’–

okay so File::Find::Rule went down so well with the buying public that everyone wanted to add extra features. With the 0.07 release this became a possibility, using the following conventions. πŸ‘‘

πŸŽ€ Declare your package πŸŽ€

First up, declare your package like this:

package File::Find::Rule::Random;
use strict;

πŸ¦‹ Inherit methods from File::Find::Rule πŸ¦‹

Then grab the useful stuff by inheriting from File::Find::Rule:

# take useful things from File::Find::Rule
use base 'File::Find::Rule';

Force your madness into the main package.

# and force our crack into the main namespace
sub File::Find::Rule::random () {
    my $self = shift()->_force_object;
    $self->exec( sub { rand > 0.5 } );
}

Yes, this is being very cavalier: it defines things into the main File::Find::Rule namespace. That's due to a lack of imaginiation on the author's part β€” the author simply can't find a way for the functional and oo interface to work without doing this or some kind of inheritance, and inheritance stops you using two File::Find::Rule::Foo modules together. 😭

For this reason, try and pick distinct names for your extensions. If this becomes a problem, the author may institute a semi-official registry of taken names. iykyk ✨

🌈 Taking no arguments. 🌈

Note the null prototype on random. This is a cheat for the procedural interface to know that your sub takes no arguments, and so allows this to happen:

find( random => in => '.' );

If you hadn't declared random with a null prototype it would have consumed in as a parameter to it, then got all confused as it doesn't know about a . rule. the more you know ⭐

πŸ‘‘ AUTHOR πŸ‘‘

Richard Clamp β€” <richardc@unixbeard.net> 🫢

Copyright (C) 2002 Richard Clamp. All Rights Reserved.

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. πŸ“

🌟 SEE ALSO 🌟

  • File::Find::Rule β€” go look, bestie.
  • File::Find::Rule::MMagic β€” this was the first extension module, so maybe check that out. πŸ‘€

mwah πŸ’‹ that's the whole page, bestie. It's from perl v5.42.0, dated 2025-06-11, and the page is File::F...xtending(3). go slay your extensions 🧚✨

πŸ“¦ where this page comes from