Self-descriptive methods
Weekly challenge 107 — 5 April 2021
Week 107: 5 Apr 2021
Write a script to list the methods of a package/class.
Example 1 Input: package Calc; use strict; use warnings; sub new { bless {}, shift; } sub add { } sub mul { } sub div { } 1; Output: BEGIN mul div new add
This is a little outside my comfort zone, but a little
web searching leads to the conclusion that for package
Alpha::Beta the desired result is
keys{%{'Alpha::Beta::'}). I hope that's right.
#!/usr/bin/perl # Blog: http://ccgi.campbellsmiths.force9.co.uk/challenge use v5.26; # The Weekly Challenge - 2021-04-05 use utf8; # Week 107 - task 2 - List methods use warnings; # Peter Campbell Smith binmode STDOUT, ':utf8'; use Encode; require URI::Escape; require Time::Local; list_methods('URI::Escape'); list_methods('Time::Local'); sub list_methods { my ($package); # initialise $package = $_[0]; say qq[\nInput: $package]; no strict 'refs'; # show details say qq[Output: \n ] . join(qq[\n ], sort keys %{$package . '::'}); }
6 lines of code
I completed this challenge after the closing date
and it has not
been submitted to GitHub
Input: URI::Escape Output: BEGIN EXPORT EXPORT_OK VERSION _fail_hi escape_char escapes import uri_escape uri_escape_utf8 uri_unescape Input: Time::Local Output: BEGIN EXPORT EXPORT_OK ISA SECS_PER_DAY SECS_PER_HOUR SECS_PER_MINUTE VERSION _daygm _is_leap_year _timegm timegm timegm_modern timegm_nocheck timegm_posix timelocal timelocal_modern timelocal_nocheck timelocal_posix
Any content of this website which has been created by Peter Campbell Smith is in the public domain