Skip to content

Instantly share code, notes, and snippets.

# this works
use Class::Load 0.20 'load_class';
my $var = 'baz';
my $class = 'Foo::Bar';
my $result = load_class( $class )->class_method( $var ); # works wonders with ->new
@xenoterracide
xenoterracide / cybersource_snippet.pl
Created November 3, 2012 21:56
injectable example
sub _build_cybs_wsdl {
my $self = shift;
my $dir = $self->_production ? 'production' : 'test';
load 'File::ShareDir::ProjectDistDir', 'dist_file';
return load_class('Path::Class::File')->new(
dist_file(
'Business-CyberSource',
$dir
@xenoterracide
xenoterracide / override_attribute.pl
Created July 22, 2012 15:46
Request/Response Trace
# impossible
package Trace {
use Moose::Role;
has trace => (
isa => 'TraceObject',
is => 'ro',
);
}
package Request {
@xenoterracide
xenoterracide / output.pl
Created May 29, 2012 04:37
remote helper output
{
Boolean => "N",
FooBar => "Baz",
MyMessagePart => {
SomeColonDelimitedArray => "1:2:3:4"
}
}
@xenoterracide
xenoterracide / remote_helper.pl
Created May 29, 2012 03:48
MooseX::RemoteHelper example
package MessagePart {
use Moose 2;
use MooseX::RemoteHelper;
has array => (
remote_name => 'SomeColonDelimitedArray',
isa => 'ArrayRef',
is => 'ro',
serializer => sub {
my ( $attr, $instance ) = @_;
@xenoterracide
xenoterracide / remote_helper.pl
Created May 29, 2012 01:53
MooseX::RemoteHelper Example
use 5.014;
use warnings;
use Data::Dumper;
package MessagePart {
use Moose;
use MooseX::RemoteHelper;
with 'MooseX::RemoteHelper::CompositeSerialization';
has array => (
@xenoterracide
xenoterracide / exception.pl
Created May 11, 2012 06:16
Exception::Base subclassing with attributes
use 5.014;
use warnings;
use Try::Tiny;
use Exception::Base (
'My::Exception' => {
has => [ qw( usermsg logmsg attr ) ],
string_attributes => [ qw( usermsg logmsg ) ],
},
);
@xenoterracide
xenoterracide / exception.pl
Created May 11, 2012 03:21
Exception::Base
use 5.014;
use warnings;
use Try::Tiny;
use Exception::Base;
try {
if ( 0 ) {
Exception::Base->throw( message => 'this sucks', value => 0 );
}
package MyRole {
sub foo { return 'test' }
}
package MyClass {
with 'MyRole';
...
}
MyClass->new->foo;
class MyClass {
method foo { return $self->{foo} }
method info { return load_class('Class::Info')->new }
}
MyClass->new->foo;
# to be the equivalent of
{