view release on metacpan or search on metacpan
.claude/skills/perl-io-async-future/SKILL.md view on Meta::CPAN
my ($self, %params) = @_;
for my $key (qw(host port on_connect on_error)) {
$self->{$key} = delete $params{$key} if exists $params{$key};
}
$self->{host} //= 'localhost';
$self->SUPER::configure(%params); # MUST chain â unknown keys die here
}
sub host { $_[0]->{host} }
```
**Rules:**
- `delete` your keys from `%params` before `SUPER::configure` â leftover keys throw `configure_unknown`.
- Parameter validation/defaults go in `configure`, **not** `new` (Notifier owns construction).
- A Notifier only knows its loop after `$loop->add($notifier)` â anything that calls `$self->loop` must run after that.
- Child notifiers (`IO::Async::Stream`, `IO::Async::Timer`) attach via `$self->add_child($child)`; they inherit the loop automatically.
---
.claude/skills/perl-io-async-future/SKILL.md view on Meta::CPAN
- **Local-variable-only Future** â silent GC. Hold it on `$self`.
- **Async sub whose caller drops the Future** â "lost its returning future". Hold the result.
- **Strong `$self` capture in callback chain** â object never destroyed; reconnect loops leak. `weaken` it.
- **Forgetting to `delete` the held Future on completion** â stale guards block future operations.
- **Not chaining `SUPER::configure`** â defaults silently missing, or unknown keys silently accepted.
- **Returning a Future from `async sub` without `await`** â double-wrapped result.
- **Calling `$self->loop` before `$loop->add($self)`** â `loop` is undef.
- **Mixing `then` and `on_done` thinking they're the same** â `on_done` returns the original Future, your "chain" is actually two parallel observers.
- **Cancelling a Future inside its own callback** â undefined; cancel from outside.
- **Using `Future->new` instead of `$loop->new_future`** when you need loop-aware behavior (the loop variant integrates with timeouts and is the recommended form inside Notifier subclasses).
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/RecordStream/Aggregator/Concatenate.pm view on Meta::CPAN
{
my $class = shift;
my $delim = shift;
my $field = shift;
my $this = $class->SUPER::new($field);
$this->{'delim'} = $delim;
return $this;
}
lib/App/RecordStream/Aggregator/Concatenate.pm view on Meta::CPAN
{
my $class = shift;
my $delim = shift;
my $valuation = shift;
my $this = $class->SUPER::new_from_valuation($valuation);
$this->{'delim'} = $delim;
return $this;
}
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/Regather/Config.pm view on Meta::CPAN
my $logger = delete $_{logger};
my $fg = delete $_{fg};
my $verbose = delete $_{verbose};
my $nodes = delete $_{add_nodes};
my $self = $class->SUPER::new(%_);
$self->{logger} = $logger;
$self->{verbose} = $verbose;
$self->get_ldap_config_file;
view all matches for this distribution
view release on metacpan or search on metacpan
inc/Pod/Markdown.pm view on Meta::CPAN
# ABSTRACT: Convert POD to Markdown
use parent qw(Pod::Parser);
sub initialize {
my $self = shift;
$self->SUPER::initialize(@_);
$self->_private;
$self;
}
sub _private {
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/Repository/MySQL.pm view on Meta::CPAN
$columns = $self->_get_default_columns($table) if (!$columns);
my $nrows = 0;
my $import_method = $options->{import_method} || $self->{import_method} || "";
if ($import_method eq "basic") {
$nrows = $self->SUPER::import_rows($table, $columns, $file, $options);
}
elsif ($import_method eq "insert") {
$nrows = $self->insert_rows($table, $columns, $file, $options);
}
elsif ($import_method eq "insert_mysql") {
lib/App/Repository/MySQL.pm view on Meta::CPAN
sub export_rows {
&App::sub_entry if ($App::trace);
my ($self, $table, $params, $file, $options) = @_;
if ($options->{export_method} && $options->{export_method} eq "basic") {
$self->SUPER::export_rows($table, $file, $options);
}
else {
my $columns = $options->{columns} || $self->{table}{$table}{columns};
my $where_clause = $self->_mk_where_clause($table, $params, $options);
my $sql = "select\n " . join(",\n ", @$columns);
view all matches for this distribution
view release on metacpan or search on metacpan
sub ACTION_author_test
{
my $self = shift;
local $self->{properties}{test_files} = 'xt/author/*.t' ;
$self->SUPER::ACTION_test();
}
sub ACTION_build
{
my $self = shift;
EOV
close VERSION ;
}
$self->SUPER::ACTION_build(@_);
}
sub ACTION_dist
{
my $self = shift;
{
print "git not found, 'Changes' will not be generated from git log!\n" ;
}
}
$self->SUPER::ACTION_test() ;
#~ $self->ACTION_author_test() ;
$self->SUPER::ACTION_dist();
};
EOC
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/ReslirpTunnel.pm view on Meta::CPAN
my $sl = $parent_dir->child('latest.reslirp-tunnel.log');
unlink $sl if -l $sl;
symlink $fn, $sl;
};
}
$self->SUPER::_init_logger(log_level => $level, log_to_stderr => $log_to_stderr, log_file => $fn);
}
sub _set_signal_handlers {
my $self = shift;
my $signal_count = 0;
view all matches for this distribution
view release on metacpan or search on metacpan
inc/Module/Install/ExtraTests.pm view on Meta::CPAN
package # The newline tells PAUSE, "DO NOT INDEXING!"
MY;
sub test_via_harness {
my $self = shift;
return $self->SUPER::test_via_harness(@_)
unless $use_extratests;
my ($perl, $tests) = @_;
my $a_str = -d 'xt/author' ? 'xt/author' : '';
my $r_str = -d 'xt/release' ? 'xt/release' : '';
inc/Module/Install/ExtraTests.pm view on Meta::CPAN
}
sub dist_test {
my ($self, @args) = @_;
return $self->SUPER::dist_test(@args)
unless $use_extratests;
my $text = $self->SUPER::dist_test(@args);
my @lines = split /\n/, $text;
$_ =~ s/ (\S*MAKE\S* test )/ RELEASE_TESTING=1 $1 / for grep { m/ test / } @lines;
return join "\n", @lines;
}
}
view all matches for this distribution
view release on metacpan or search on metacpan
inc/SandyMakeMaker.pm view on Meta::CPAN
use File::ShareDir::Install;
# These two are necessary to keep bmake happy
sub xs_c {
my $self = shift;
my $ret = $self->SUPER::xs_c(@_);
$ret =~ s/\$\*\.xs/\$</g;
$ret =~ s/\$\*\.c\b/\$@/g;
return $ret;
}
sub c_o {
my $self = shift;
my $ret = $self->SUPER::c_o(@_);
$ret =~ s/\$\*\.c\b/\$</g;
$ret =~ s/\$\*\$\(OBJ_EXT\)/\$@/g;
return $ret;
}
sub const_cccmd {
my $ret = shift->SUPER::const_cccmd(@_);
return q{} unless $ret;
$ret .= ' -o $@';
return $ret;
}
# Fix shared object path
sub constants {
my $self = shift;
my $ret = $self->SUPER::constants(@_);
$ret =~ s|(?<=\nFULLEXT).*\n| = App/Sandy/RNG\n|;
$ret =~ s|(?<=\nBASEEXT).*\n| = RNG\n|;
return $ret;
}
view all matches for this distribution
view release on metacpan or search on metacpan
Makefile.PL view on Meta::CPAN
if ( $file =~ m{^/.[^/]+} ) {
return 0;
} else {
return $self->SUPER::libscan($file);
#return 1;
}
}
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Net/ManageSieve/Siesh.pm view on Meta::CPAN
1;
} or do {
die "Cannot load module IO::Socket::SSL\n";
}
}
return $self->SUPER::starttls(@args);
}
sub movescript {
my ( $self, $source, $target ) = @_;
my $is_active = $self->is_active($source);
lib/Net/ManageSieve/Siesh.pm view on Meta::CPAN
}
sub listscripts {
my ( $self, $unactive ) = @_;
my (@scripts);
@scripts = @{ $self->SUPER::listscripts() };
my $active = delete $scripts[-1];
if ($unactive) {
@scripts = grep { $_ ne $active } @scripts;
}
return @scripts;
}
sub deletescript {
my ( $sieve, @scripts ) = @_;
for my $script (@scripts) {
$sieve->SUPER::deletescript($script);
}
return 1;
}
sub view_script {
lib/Net/ManageSieve/Siesh.pm view on Meta::CPAN
return $self->get_active() eq $script;
}
sub get_active {
my ($self) = @_;
return $self->SUPER::listscripts()->[-1];
}
sub script_exists {
my ( $self, $scriptname ) = @_;
my %script = map { $_ => 1 } $self->listscripts;
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/SimpleBackuper/DB/FilesTable.pm view on Meta::CPAN
sub delete {
my $self = shift;
%find_by_parent_id_name_cache = ();
$find_by_parent_id_name_cache_parent_id = 0;
return $self->SUPER::delete(@_);
}
1;
view all matches for this distribution
view release on metacpan or search on metacpan
t/lib/TestsFor/App/SimulateReads/Fastq.pm view on Meta::CPAN
QUALITY_SIZE => 10,
};
sub startup : Tests(startup) {
my $test = shift;
$test->SUPER::startup;
my $class = ref $test;
$class->mk_classdata('default_fastq');
$class->mk_classdata('default_attr');
$class->mk_classdata('seq');
$class->mk_classdata('seq_len');
}
sub setup : Tests(setup) {
my $test = shift;
my %child_arg = @_;
$test->SUPER::setup;
my %default_attr = (
quality_profile => SEQ_SYS,
read_size => QUALITY_SIZE,
%child_arg
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Slaughter/Transport/git.pm view on Meta::CPAN
=cut
sub new
{
my ( $class, %args ) = @_;
return $class->SUPER::new(%args);
}
=head2 _init
view all matches for this distribution
view release on metacpan or search on metacpan
socialcalc/third-party/lib/PocketIO.pm view on Meta::CPAN
use Plack::Util::Accessor qw(resource handler class instance method);
use PocketIO::Resource;
sub new {
my $self = shift->SUPER::new(@_);
$self->handler($self->_get_handler);
return $self;
}
view all matches for this distribution
view release on metacpan or search on metacpan
inc/Spiffy.pm view on Meta::CPAN
# This line is here to convince "autouse" into believing we are autousable.
sub can {
($_[1] eq 'import' and caller()->isa('autouse'))
? \&Exporter::import # pacify autouse's equality test
: $_[0]->SUPER::can($_[1]) # normal case
}
# TODO
#
# Exported functions like field and super should be hidden so as not to
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/SpamcupNG/Error/Bounce.pm view on Meta::CPAN
=cut
sub new {
my ( $class, $message_ref ) = @_;
return $class->SUPER::new( $message_ref, 1 );
}
=head2 message
Overrided from the parent class, adding required behavior.
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/SpreadRevolutionaryDate/MsgMaker/RevolutionaryDate/Calendar.pm view on Meta::CPAN
unless $locale_arg =~ /^(?:en|fr|it|es)$/;
$locale_class = 'App::SpreadRevolutionaryDate::MsgMaker::RevolutionaryDate::Locale::' . $locale_arg;
}
$self = $self->SUPER::set(%args);
if ($locale_class) {
try_load_class($locale_class)
or die "Cannot import locale class $locale_class\n";
load_class($locale_class);
view all matches for this distribution
view release on metacpan or search on metacpan
inc/Menlo/Sqitch.pm view on Meta::CPAN
while (<DATA>) {
chomp;
last unless s/^\s+//;
$deps{$_} = 1;
}
shift->SUPER::new(
@_,
_remove => [],
_bld_deps => \%deps,
);
}
sub find_prereqs {
my ($self, $dist) = @_;
# Menlo defaults to config, test, runtime. We just want to bundle runtime.
$dist->{want_phases} = ['runtime'];
return $self->SUPER::find_prereqs($dist);
}
sub configure {
my $self = shift;
my $cmd = $_[0];
return $self->SUPER::configure(@_) if ref $cmd ne 'ARRAY';
# Always use vendor install dirs. Hack for
# https://github.com/miyagawa/cpanminus/issues/581.
if ($cmd->[1] eq 'Makefile.PL') {
push @{ $cmd } => 'INSTALLDIRS=vendor';
} elsif ($cmd->[1] eq 'Build.PL') {
push @{ $cmd } => '--installdirs', 'vendor';
}
return $self->SUPER::configure(@_);
}
sub save_meta {
my $self = shift;
my ($module, $dist) = @_;
# Record if we've installed a build-only dependency.
my $dname = $dist->{meta}{name};
push @{ $self->{_remove} } => $module if $self->{_bld_deps}{$dname};
$self->SUPER::save_meta(@_);
}
sub remove_build_dependencies {
# Uninstall modules for distributions not actually needed to run Sqitch.
my $self = shift;
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/Standby/Group.pm view on Meta::CPAN
# your code here ...
sub _config_values {
my $self = shift;
my $key = shift;
return $self->SUPER::_config_values($key, $self->group_id());
}
sub _update_services {
my $self = shift;
my $contact_ref = shift;
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/Stash.pm view on Meta::CPAN
=cut
sub new {
my $class = shift;
my $self = $class->SUPER::new(@_);
unless ( $self->application ) {
my $caller = (caller)[0];
$self->application($caller);
}
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/StaticImageGallery/Base/NeedDir.pm view on Meta::CPAN
use DateTime;
use parent 'App::StaticImageGallery::Base::Any';
sub new {
my $class = shift;
my $self = $class->SUPER::new(@_);
my %args = @_;
if ( defined $args{dir} and ref( $args{dir} ) eq 'App::StaticImageGallery::Dir' ) {
$self->{_dir} = $args{dir};
} else {
view all matches for this distribution
view release on metacpan or search on metacpan
local/lib/perl5/Module/Build/Cookbook.pm view on Meta::CPAN
code => <<'SUBCLASS' );
sub ACTION_install {
my $self = shift;
# YOUR CODE HERE
$self->SUPER::ACTION_install;
}
SUBCLASS
$class->new(
module_name => 'Your::Module',
view all matches for this distribution
view release on metacpan or search on metacpan
sub ACTION_author_test
{
my $self = shift;
local $self->{properties}{test_files} = 'xt/author/*.t' ;
$self->SUPER::ACTION_test();
}
sub ACTION_build
{
my $self = shift;
# end of generated version module
EOV
close VERSION ;
$self->SUPER::ACTION_build(@_);
}
sub ACTION_dist
{
my $self = shift;
else
{
print "git not found, 'Changes' will not be generated from git log!\n" ;
}
$self->SUPER::ACTION_test() ;
#~ $self->ACTION_author_test() ;
$self->SUPER::ACTION_dist();
};
EOC
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/Test/Generator/SchemaExtractor.pm view on Meta::CPAN
Examines C<new> methods to determine required and optional parameters, validation requirements, and default values. This enables test generators to provide appropriate constructor arguments when object instantiation is needed.
=item * B<Inheritance Relationship Handling>
Detects parent classes through C<use parent>, C<use base>, and C<@ISA> declarations. Identifies when methods use C<SUPER::> calls and determines whether the current class or a parent class constructor should be used for object instantiation.
=item * B<External Object Dependency Detection>
Identifies when methods create or depend on objects from other classes, enabling proper test setup with mock objects or real dependencies.
lib/App/Test/Generator/SchemaExtractor.pm view on Meta::CPAN
# use base, and @ISA declarations.
#
# Entry: $current_package - current package
# name string.
# $method_body - method source string
# (checked for SUPER::
# calls).
#
# Exit: Returns an inheritance_info hashref
# if any inheritance information is
# found, or undef otherwise.
lib/App/Test/Generator/SchemaExtractor.pm view on Meta::CPAN
push @parent_classes, @isa_parents;
$inheritance_info{isa_array} = \@isa_parents;
}
}
# 3. Check if method uses SUPER:: calls
if ($method_body && $method_body =~ /SUPER::/) {
$inheritance_info{uses_super} = 1;
if ($method_body =~ /SUPER::new/) {
$inheritance_info{calls_super_new} = 1;
}
}
# 4. Check if current package has its own new method
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/TestOnTap/Harness.pm view on Meta::CPAN
sub new
{
my $class = shift;
my $args = shift;
my $self = $class->SUPER::new
(
{
formatter => __getFormatter($args),
jobs => $args->getJobs(),
merge => $args->getMerge(),
lib/App/TestOnTap/Harness.pm view on Meta::CPAN
{
# the normal case is to run with a 'real' harness that parses
# TAP, handles parallelization, formatters and all that
#
$wdmgr->beginTestRun();
my $aggregator = $self->SUPER::runtests(@pairs);
$wdmgr->endTestRun($self->{testontap}->{args}, $aggregator);
$failed = $aggregator->failed() || 0;
}
else
{
view all matches for this distribution
view release on metacpan or search on metacpan
sub ACTION_author_test
{
my $self = shift;
local $self->{properties}{test_files} = 'xt/author/*.t' ;
$self->SUPER::ACTION_test();
}
sub ACTION_dist
{
my $self = shift;
{
print "git not found, 'Changes' will not be generated from git log!\n" ;
}
}
$self->SUPER::ACTION_test() ;
#~ $self->ACTION_author_test() ;
$self->SUPER::ACTION_dist();
};
EOC
;
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/VW/Install.pm view on Meta::CPAN
use File::ShareDir 'module_dir';
sub options {
my ($class) = @_;
(
$class->SUPER::options,
);
}
our %systems;
$systems{debian} = {};
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/Web/VPKBuilder.pm view on Meta::CPAN
use Plack::Request;
use Sort::ByExample qw/sbe/;
use YAML qw/LoadFile/;
sub new {
my $self = shift->SUPER::new(@_);
$self->{cfg} = {};
for (sort <cfg/*>) {
my $cfg = LoadFile $_;
$self->{cfg} = merge $self->{cfg}, $cfg
}
view all matches for this distribution
view release on metacpan or search on metacpan
lib/App/Widget/AppFrame.pm view on Meta::CPAN
#$self->{noframe} = $selector_widget->get_selected("noframe");
return 1;
}
else {
return $self->SUPER::handle_event($wname, $event, @args);
}
}
######################################################################
view all matches for this distribution