view release on metacpan or search on metacpan
SimplePam.pm view on Meta::CPAN
unless (defined ($result));
if ( $result == 0 ) { return "Authen::PAM error" }
elsif ( $result == 1 ) { return "success" }
elsif ( $result == 2 ) { return "failure" }
elsif ( $result == 3 ) { return "insuficient credentials" }
elsif ( $result == 4 ) { return "authentication information unavailable" }
elsif ( $result == 5 ) { return "user unknown" }
elsif ( $result == 6 ) { return "maximum tries" }
elsif ( $result == 7 ) { return "unknown error" }
elsif ( $result == 8 ) { return "authentication error" }
SimplePam.pm view on Meta::CPAN
elsif ( $result == 15 ) { return "symbol not found" }
elsif ( $result == 16 ) { return "memory buffer error" }
elsif ( $result == 17 ) { return "the password should be changed" }
elsif ( $result == 18 ) { return "user account has expired" }
elsif ( $result == 19 ) { return "cannot make/remove an entry for the specified session" }
elsif ( $result == 20 ) { return "cannot retrieve users credentials" }
elsif ( $result == 21 ) { return "user credentials expired" }
elsif ( $result == 22 ) { return "no pam module specific data is present" }
elsif ( $result == 23 ) { return "conversation error" }
elsif ( $result == 24 ) { return "ignore underlying account module" }
elsif ( $result == 25 ) { return "critical error" }
elsif ( $result == 26 ) { return "user authentication has expired" }
SimplePam.pm view on Meta::CPAN
The password does not match.
=item 3 Insufficient Credentials.
For some reason the application does not have enough credentials to authenticate the user.
E.g. A non-root user trying to authenticate/validate the root user password.
=item 4 Authentication information unavailable.
The modules were not able to access the authentication information. This might be due to a network or hardware failure etc.
view all matches for this distribution
view release on metacpan or search on metacpan
lib/AxKit2/Client.pm view on Meta::CPAN
}
elsif ($code == UNAUTHORIZED) {
$self->write("<p>This server could not verify that you\n" .
"are authorized to access the document\n" .
"requested. Either you supplied the wrong\n" .
"credentials (e.g., bad password), or your\n" .
"browser doesn't understand how to supply\n" .
"the credentials required.</p>\n");
}
elsif ($code == FORBIDDEN) {
$self->write("<p>You don't have permission to access " .
xml_escape($self->headers_in->uri) .
"\non this server.</p>\n");
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Azure/AD/ClientCredentials.pm view on Meta::CPAN
return if $self->expiration >= time;
my $auth_response = $self->ua->post_form(
$self->token_endpoint,
{
grant_type => 'client_credentials',
client_id => $self->client_id,
client_secret => $self->secret_id,
resource => $self->resource_id,
}
);
view all matches for this distribution
view release on metacpan or search on metacpan
bin/bgpmon_analytics_db_import view on Meta::CPAN
BEGIN{
our $VERSION = '1.07';
};
#step 1: set up script args (DB name/credentials, data source, log file name,
#config file name)
#step 2: fetch data from the specified data source
#step 3: convert the XML to hashes
#step 4: grab the fields I'm interested in
#step 5: insert fields into DB staging table
bin/bgpmon_analytics_db_import view on Meta::CPAN
);
use constant MAX_UPDATES_PER_INJECT => 1000;
#Define parameters for logging (filename, level, use syslog)
#Define parameters for system state (DB name,DB credentials, config filename)
#Define parameters for data retrieval (source, Fetch parameters)
my @params = (
{
'Name' => BGPmon::Configure::CONFIG_FILE_PARAMETER_NAME,
'Type' => BGPmon::Configure::FILE,
view all matches for this distribution
view release on metacpan or search on metacpan
examples/authenticate.pl view on Meta::CPAN
use JSON::XS;
use Backblaze::B2;
use Getopt::Long;
GetOptions(
'c|credentials:s' => \my $credentials_file,
'o|application-credentials:s' => \my $app_credentials_file,
);
$app_credentials_file ||= './app-credentials.json';
=head1 SYNOPSIS
=head1 SEE ALSO
examples/authenticate.pl view on Meta::CPAN
my $b2 = Backblaze::B2->new(
version => 'v1',
log_message => sub { warn sprintf "[%d] %s\n", @_; },
);
my $credentials = $b2->read_credentials( $credentials_file );
use Data::Dumper;
my ($app_credentials) = $b2->authorize_account(
%$credentials
);
open my $fh, '>', $app_credentials_file
or die "Couldn't write credentials to '$app_credentials_file'";
binmode $fh;
print {$fh} encode_json( $app_credentials );
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Backblaze/B2V2Client.pm view on Meta::CPAN
=head2 Testing Your Credentials
During install, this module will attempt to connect to B2 and download
a 16KB file into memory. To test using your B2 account
credentials, set these environmental varables prior to attempting
to install:
B2_APP_KEY_ID - The application key ID for the key you wish to test.
B2_APP_KEY - The application key -- is never displayed in the B2 UI.
B2_ACCT_ID - Your account ID; will be the ID of your master key
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Bb/Collaborate/Ultra.pm view on Meta::CPAN
use Bb::Collaborate::Ultra::Connection;
use Bb::Collaborate::Ultra::Session;
use Bb::Collaborate::Ultra::User;
use Bb::Collaborate::Ultra::LaunchContext;
my %credentials = (
issuer => 'OUUK-REST-API12340ABCD',
secret => 'ABCDEF0123456789AA',
host => 'https://xx-csa.bbcollab.com',
);
# connect to server
my $connection = Bb::Collaborate::Ultra::Connection->new(\%credentials);
$connection->connect;
# create a virtual classroom, starts now runs, for 15 minutes
my $start = time() + 60;
my $end = $start + 900;
view all matches for this distribution
view release on metacpan or search on metacpan
t/Bb/Collaborate/V3.pm view on Meta::CPAN
my $pass = $ENV{'BBC_TEST_PASS'.$suffix};
my $url = $ENV{'BBC_TEST_URL'.$suffix};
if ($url) {
my $uri_obj = URI->new($url, 'http');
my $userinfo = $uri_obj->userinfo; # credentials supplied in URI
if ($userinfo) {
my ($uri_user, $uri_pass) = split(':', $userinfo, 2);
$user ||= URI::Escape::uri_unescape($uri_user);
$pass ||= URI::Escape::uri_unescape($uri_pass)
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Beekeeper/Client.pm view on Meta::CPAN
sub __use_authorization_token {
my ($self, $token) = @_;
# Using a hashing function makes harder to access the wrong worker pool by mistake,
# but it is not an effective access restriction: anyone with access to the backend
# bus credentials can easily inspect and clone auth data tokens
my $salt = $self->{_CLIENT}->{auth_salt};
my $adata_ref = \$self->{_CLIENT}->{auth_data};
view all matches for this distribution
view release on metacpan or search on metacpan
data/wiki2.html view on Meta::CPAN
<script type="text/javascript" id="" src="./Star Trek _ Memory Alpha _ Fandom_files/17632281258.js"></script>
<script type="text/javascript" id="">(function(){window.ads&&window.ads.pushToConsentQueue&&window.ads.pushToConsentQueue(function(a){if(a&&(!a.geoRequiresConsent||a.gdprConsent)){var d=mw.config.get("wgUserId");d&&(a=document.createElement("script")...
Sailthru.init({customerId:g,autoTrackPageview:!1,useStoredTags:!1});document.cookie.match(/^(.*;)?\s*sailthru_hid\s*=\s*[^;]+(.*)?$/)?e():fetch(mw.config.get("wgServicesExternalDomain")+"email-service/sailthru/user-cookie",{method:"POST",credentials:...
h.cookie+"; expires\x3d"+c;e()})})},document.head.append(a))}})})();</script>
<script type="text/javascript" id="">(function(){function d(){return[]}"undefined"!==typeof module&&(module.exports=d);for(var c=[],a=0;a<c.length;a++){var b=document.createElement("script");b.setAttribute("src",c[a]);b.setAttribute("async","");docum...
<script type="text/javascript" id="">(function(){var a=[{thanksTitle:"Thanks for visiting Fandom.",thanksSubtitle:"Come back to visit more communities like this.",thanksCopyColor:"00d6d6",thanksBackgroundColor:"002A32",thanksCloseButtonColor:"00d6d6"...
thanksBackgroundColor:"DFEC24",thanksCloseButtonColor:"002A32"},{thanksTitle:"Thanks for visiting Fandom.",thanksSubtitle:"Come back to visit more communities like this.",thanksCopyColor:"002A32",thanksBackgroundColor:"DFEC24",thanksCloseButtonColor:...
var c=!0,b=Math.floor(Math.random()*(a.length-0+1))+0;a=a[b];a||(c=!1,a={variant:"control"});window.dataLayer.push({event:"thanks-variant",action:"picked",details:JSON.stringify(a),variant_num:b});b=Object.keys(a);for(key in b)window._pf(key,a[key]);...
view all matches for this distribution
view release on metacpan or search on metacpan
share/SpamAssassin/easy_ham/00793.6da29475fba399c38bb0a93efabcae5c view on Meta::CPAN
ordinary American receives from either their employer or the government.
It should be pointed out that while many of these Indian corporations are
ineptly run, and mostly provide sinecures for other Indians, a minority are
very smartly managed and a few hire non-Indian business executives with good
credentials to run their business divisions. An example of this is the
Haida Corporation, which while having less 1,000 tribal shareholders, has
billions of dollars in assets and the various corporations they own have
gross revenues in the $200-300 million range (and growing). Yet the
dividend paid out is strictly controlled, about $20k in this particular
case, and they engaged in a practice of waiting a couple decades before
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Benchmark/Report/GitHub.pm view on Meta::CPAN
UPLOAD: {
my $orig = Cwd::cwd();
chdir "$project.wiki";
system("git config user.name '$ENV{GH_NAME}'");
system("git config user.email '$ENV{GH_EMAIL}'");
system("git config credential.helper 'store --file=.git/credentials'");
open my $cred, '>', '.git/credentials';
print $cred "https://$ENV{GH_TOKEN}:\@github.com\n";
close $cred;
system("git add .");
system("git commit -a -m 'benchmarks for $job_num'");
system("git push --all");
system("rm '.git/credentials'");
chdir($orig);
File::Path::remove_tree("$project.wiki");
}
return "https://github.com/$owner/$project/wiki/$page";
view all matches for this distribution
view release on metacpan or search on metacpan
lib/BigIP/iControl.pm view on Meta::CPAN
my $sub_detail_list= {
name => $args{name},
event_type_list => [@{$args{event_type}}],
url => $args{url},
url_credentials => {
auth_mode => 'AUTHMODE_NONE',
#username => $args{username},
#password => $args{password}
},
ttl => $args{ttl},
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Bing/Translate.pm view on Meta::CPAN
my $secret = $self->{'secret'};
my $ua = LWP::UserAgent->new() or die;
$ua->ssl_opts (verify_hostname => 0);
my $url = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/";
my $request = POST( $url, [ grant_type => "client_credentials", scope => "http://api.microsofttranslator.com", client_id => "$id", client_secret => "$secret" ] );
# my $content = $ua->request($request)->as_string() or die;
my $response = $ua->request($request);
my $content;
my $authToken;
if ($response->is_success) {
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Bintray/API/Session.pm view on Meta::CPAN
);
# Set API URL
$opts{apiurl} = 'https://bintray.com/api/v1';
# Check for credentials
if ( $opts{username} and $opts{apikey} ) {
$opts{hascreds} = 1;
}
# Init HTTP Client
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Bio/CIPRES.pm view on Meta::CPAN
# create URI object for easier protocol/port parsing
$self->{uri} = URI->new( $self->{cfg}->{url} );
my $netloc = join ':', $self->{uri}->host, $self->{uri}->port;
$self->{agent}->credentials(
$netloc,
$DOMAIN,
$self->{cfg}->{user},
$self->{cfg}->{pass}
);
lib/Bio/CIPRES.pm view on Meta::CPAN
=back
=head1 TESTING
The distribution can be installed and tested in the usual ways. Note however,
that running the full test suite requires CIPRES REST credentials (not shipped
with package for obvious reasons). If a credentials file is found at
"$ENV{HOME}/.cipres", the full test suite will be run -- otherwise only
rudimentary tests will be run and most will be skipped.
=head1 CAVEATS AND BUGS
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Bio/DB/Taxonomy/entrez.pm view on Meta::CPAN
=head2 authentication
Title : authentication
Usage : $db->authentication($user,$pass)
Function: Get/Set authentication credentials
Returns : Array of user/pass
Args : Array or user/pass
=cut
view all matches for this distribution
view release on metacpan or search on metacpan
Create a new Bio::Das object, with the indicated timeout and optional
callback for authentication. The timeout will be used to decide when
a server is not responding and to return a "can't connect" error. Its
value is in seconds, and can be fractional (most systems will provide
millisecond resolution). The authentication callback will be invoked
if the remote server challenges Bio::Das for authentication credentials.
Aggregators are used to build multilevel hierarchies out of the raw
features in the DAS stream. For a description of aggregators, see
L<Bio::DB::GFF>, which uses exactly the same aggregator system as
Bio::Das.
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Bio/DB/EUtilities.pm view on Meta::CPAN
=head2 authentication
Title : authentication
Usage : $db->authentication($user,$pass)
Function: Get/Set authentication credentials
Returns : Array of user/pass
Args : Array or user/pass
=head2 delay_policy
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Bio/EnsEMBL/Utils/URI.pm view on Meta::CPAN
=cut
sub generate_uri {
my ($self) = @_;
my $scheme = sprintf('%s://', ($URI_ESCAPE) ? uri_escape($self->scheme()) : $self->scheme());
my $user_credentials = q{};
my $host_credentials = q{};
my $location = q{};
if($self->user() || $self->pass()) {
my $user = $self->user();
my $pass = $self->pass();
if($URI_ESCAPE) {
$user = uri_escape($user) if $user;
$pass = uri_escape($pass) if $pass;
}
$user_credentials = sprintf('%s%s@',
( $user ? $user : q{} ),
( $pass ? q{:}.$pass : q{} )
);
}
lib/Bio/EnsEMBL/Utils/URI.pm view on Meta::CPAN
my $port = $self->port();
if($URI_ESCAPE) {
$host = uri_escape($host) if $host;
$port = uri_escape($port) if $port;
}
$host_credentials = sprintf('%s%s',
( $host ? $host : q{} ),
( $port ? q{:}.$port : q{} )
);
}
lib/Bio/EnsEMBL/Utils/URI.pm view on Meta::CPAN
}
}
$param_string .= join(q{;}, @params);
}
return join(q{}, $scheme, $user_credentials, $host_credentials, $location, $param_string);
}
1;
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Bio/Phylo/CIPRES.pm view on Meta::CPAN
my $cipres = Bio::Phylo::CIPRES->new(
'infile' => 'infile.fasta', # input data file
'tool' => 'MAFFT_XSEDE', # tool to run
'param' => { 'vparam.runtime_' => 7.5 }, # extra parameters, e.g. max runtime
'outfile' => { 'output.mafft' => 'out.fa' }, # name of output data to fetch
'yml' => 'config.yml', # client credentials
);
my $url = $cipres->run;
$cipres->clean_job( $url );
lib/Bio/Phylo/CIPRES.pm view on Meta::CPAN
my $user = $self->user;
my $pass = $self->pass;
my $ua = LWP::UserAgent->new;
DEBUG "Instantiating UserAgent $host:$PORT / $REALM / $user:****";
$ua->ssl_opts( 'verify_hostname' => 0 );
$ua->credentials(
$host . ':' . $PORT,
$REALM,
$user => $pass
);
return $ua;
view all matches for this distribution
view release on metacpan or search on metacpan
Bio/DB/GenericWebAgent.pm view on Meta::CPAN
=head2 authentication
Title : authentication
Usage : $db->authentication($user,$pass)
Function: Get/Set authentication credentials
Returns : Array of user/pass
Args : Array or user/pass
=cut
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Blitz.pm view on Meta::CPAN
sub new {
my $name = shift;
my $this = shift || {};
my $self = {
_authenticated => 0,
credentials => {
username => $this->{username},
api_key => $this->{api_key},
host => $this->{host} || 'blitz.io',
port => $this->{port} || 80,
}
lib/Blitz.pm view on Meta::CPAN
bless $self;
return $self;
}
sub _get_set_credentials {
my $self = shift;
my $field = shift;
my $value = shift;
if ($value) {
$self->{credentials}{$field} = $value;
}
return $self->{credentials}{$field};
}
=head2 username
# Get the currently configured username
lib/Blitz.pm view on Meta::CPAN
=cut
sub username {
my $self = shift;
return _get_set_credentials($self, 'username', @_);
}
=head2 api_key
# Get the currently configured api_key
lib/Blitz.pm view on Meta::CPAN
=cut
sub api_key {
my $self = shift;
return _get_set_credentials($self, 'api_key', @_);
}
=head2 host
lib/Blitz.pm view on Meta::CPAN
=cut
sub host {
my $self = shift;
return _get_set_credentials($self, 'host', @_);
}
=head2 port
# Get the currently configured port
lib/Blitz.pm view on Meta::CPAN
=cut
sub port {
my $self = shift;
return _get_set_credentials($self, 'port', @_);
}
=head2 authenticated
Have we been authenticated?
lib/Blitz.pm view on Meta::CPAN
=cut
sub get_client {
my $self = shift;
if (! $self->{client}) {
my $client = Blitz::API->client($self->{credentials});
$self->{client} = $client;
}
return $self->{client};
}
lib/Blitz.pm view on Meta::CPAN
sub {
my $self = shift;
my $result = shift;
if ($result->{ok}) {
$self->{_authenticated} = 1;
$self->{credentials}{api_key} = $result->{api_key};
my $exercise = $obj->new(
$self,
$options,
$callback
);
view all matches for this distribution
view release on metacpan or search on metacpan
t/sysinfos/ProxySG-4006060000--20090307-165730UTC.sysinfo view on Meta::CPAN
(summary)
)
)
(exception.authentication_failed
(contact)
(details "Your credentials could not be authenticated: $(quot)$(sc-auth-status)$(quot). You will not be permitted access until your credentials can be verified.")
(format)
(help "This is typically caused by an incorrect username and/or password, but could also be caused by network problems.")
(summary "Access Denied")
(http
(code "401")
t/sysinfos/ProxySG-4006060000--20090307-165730UTC.sysinfo view on Meta::CPAN
(format)
(help)
(summary)
)
)
(exception.bad_credentials
(summary "Invalid username/password")
(details <<--18cb837b.2f0aa--
<p>Your username or password were sent using an invalid/unrecognized format.</p>
<p><i>Please close your browser window.</i></p>
<p>Then, either contact technical support,
view all matches for this distribution
view release on metacpan or search on metacpan
lib/BmltClient/RootServerApi.pm view on Meta::CPAN
#
# auth_token
#
# Creates a token
#
# @param TokenCredentials $token_credentials User credentials (required)
{
my $params = {
'token_credentials' => {
data_type => 'TokenCredentials',
description => 'User credentials',
required => '1',
},
};
__PACKAGE__->method_documentation->{ 'auth_token' } = {
summary => 'Creates a token',
lib/BmltClient/RootServerApi.pm view on Meta::CPAN
# @return Token
#
sub auth_token {
my ($self, %args) = @_;
# verify the required parameter 'token_credentials' is set
unless (exists $args{'token_credentials'}) {
croak("Missing the required parameter 'token_credentials' when calling auth_token");
}
# parse inputs
my $_resource_path = '/api/v1/auth/token';
lib/BmltClient/RootServerApi.pm view on Meta::CPAN
}
$header_params->{'Content-Type'} = $self->{api_client}->select_header_content_type('application/json');
my $_body_data;
# body params
if ( exists $args{'token_credentials'}) {
$_body_data = $args{'token_credentials'};
}
# authentication setting, if any
my $auth_settings = [qw()];
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Bosch/RCPPlus.pm view on Meta::CPAN
if ($r->code eq 401) {
my $authenticate = $r->header('www-authenticate');
if ($authenticate and $authenticate =~ /realm="([^"]+)"/i) {
my $realm = $1;
$proto->{ua}->credentials($proto->{host}, $realm, $proto->{username}, $proto->{password});
$r = $proto->request(query => \%args);
return new Bosch::RCPPlus::AuthError($r->content) if ($r->code eq 401);
} else {
return new Bosch::RCPPlus::AuthError($r->content);
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Bot/BasicBot/Pluggable/Module/Nagios.pm view on Meta::CPAN
A module for IRC bots powered by L<Bot::BasicBot::Pluggable> to monitor a Nagios
install and report alerts to IRC.
Multiple Nagios instances are supported; these could be separate Nagios systems,
or just the same Nagios install but using different credentials. As each
configured instance can have specific target channels defined, this means you
could have the bot check with the username "development" and report all visible
problems to the C<#development> channel, then check again with the "sysad"
username and report problems visible to that user to the C<#sysads> channel.
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Bot/BasicBot/Pluggable/Module/TwitterFriendsStatus.pm view on Meta::CPAN
CREDENTIALS => {
'netloc' => 'twitter.com:80',
'realm' => 'Twitter API',
},
URL => {
'verify_credentials' => 'http://twitter.com/account/verify_credentials.xml',
'friends_status' => 'http://twitter.com/statuses/friends_timeline.xml',
'friend_add' => [ 'http://twitter.com/friendships/create/', '.xml' ],
'friend_remove' => [ 'http://twitter.com/friendships/destroy/', '.xml' ],
},
TICK_INTERVAL => 60,
lib/Bot/BasicBot/Pluggable/Module/TwitterFriendsStatus.pm view on Meta::CPAN
my ( $username, $password ) = ( $self->get('username'), $self->get('password') );
if ( $username and $password ) {
print "Twitter authentication previously successful. Using auth for $username\n";
$ua->credentials(
CREDENTIALS->{'netloc'},
CREDENTIALS->{'realm'},
$username,
$password,
);
lib/Bot/BasicBot/Pluggable/Module/TwitterFriendsStatus.pm view on Meta::CPAN
sub said {
my ( $self, $message, $priority ) = @_;
return unless ( $priority == 2 );
if (my($user,$pass) = $message->{'body'} =~ /^\s*!\s*twitter\s*auth\s*(\S+)\s+(\S+)/ ) {
$ua->credentials( CREDENTIALS->{'netloc'}, CREDENTIALS->{'realm'}, $user, $pass );
my $response = $ua->get( URL->{'verify_credentials'} );
my $credentials = XMLin($response->content());
use Data::Dumper;
warn Dumper($credentials);
if ( $credentials->{name} eq $user) {
$self->reply(
$message,
"You have properly authenticated to Twitter as $user\n" .
"This authentication will be saved in the bot memory storage.\n" .
"$user has $credentials->{followers_count} followers and" .
"follows $credentials->{friends_count} users.\n"
);
$self->set( 'username' => $1 );
$self->set( 'password' => $2 );
}
else {
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Broadworks/OCIP/Deprecated.pod view on Meta::CPAN
=head2 Deprecated17
=head3 DeviceManagementFileAuthLocationGetRequest17
Get the address and credentials of the File Repository hosting the requested
access device file. Also get the file name and path on the File Repository.
The response is either a C<DeviceManagementFileAuthLocationGetResponse17> or an
C<ErrorResponse>. Replaced by: C<DeviceManagementFileAuthLocationGetRequest18>
view all matches for this distribution
view release on metacpan or search on metacpan
lib/Bubblegum/Prototype.pm view on Meta::CPAN
The mixin method, using the role key, modifies the subject using role
composition. Please note that applying a role will not overwrite existing
methods. If you desire to overwrite existing methods, please extend the object,
then apply the roles desired.
# add credentials and request methods dynamically
$film_search->proto->mixin(role => 'authorization');
$film_search->proto->mixin(role => 'advanced_search');
One of the very cool and interesting practices that this style of programming
encourages is modifying class definitions at runtime. This is achieved using
view all matches for this distribution