Here's a work in progress patch that removes the libregexp-copy-perl dependency from libhtml-formfu-perl by making it use Clone::clone() instead of Storable::dclone().
I'm sending it upstream for comments next. -- Niko Tyni [email protected]
>From f00d042d25afdc1d7ce979182b9646b2dfb838dd Mon Sep 17 00:00:00 2001 From: Niko Tyni <[email protected]> Date: Sat, 15 May 2010 22:10:06 +0300 Subject: [PATCH] Drop Regexp-Copy dependency by switching from Storable::dclone to Clone::clone Regexp::Copy only seems used to get Storable to support qr// objects. Also, it looks like Storable is mostly needed for its dclone() function. There's similar functionality in the Clone module, and Storable::dclone is allegedly "slower, but more flexible". Naively replace all uses of Storable::dclone() with Clone::clone() and drop the Regexp::Copy use altogether. http://bugs.debian.org/580328 [rt.cpan.org #57390] --- lib/HTML/FormFu.pm | 5 ++--- lib/HTML/FormFu/Constraint.pm | 4 ++-- lib/HTML/FormFu/Constraint/Set.pm | 4 ++-- lib/HTML/FormFu/Constraint/_others.pm | 4 ++-- lib/HTML/FormFu/Element.pm | 8 ++++---- lib/HTML/FormFu/Element/Block.pm | 4 ++-- lib/HTML/FormFu/Element/Multi.pm | 8 ++++---- lib/HTML/FormFu/Element/_Field.pm | 8 ++++---- lib/HTML/FormFu/Element/_Group.pm | 6 +++--- lib/HTML/FormFu/Element/reCAPTCHA.pm | 2 +- lib/HTML/FormFu/Filter/HTMLScrubber.pm | 4 ++-- lib/HTML/FormFu/MultiForm.pm | 7 ++++--- lib/HTML/FormFu/ObjectUtil.pm | 14 +++++++------- t/deprecated/element_defaults.t | 4 ++-- t/form/default_args.t | 4 ++-- 15 files changed, 43 insertions(+), 43 deletions(-) diff --git a/lib/HTML/FormFu.pm b/lib/HTML/FormFu.pm index 5e16f16..ec3cd0a 100644 --- a/lib/HTML/FormFu.pm +++ b/lib/HTML/FormFu.pm @@ -38,8 +38,7 @@ use HTML::FormFu::Util qw( use List::Util qw( first ); use List::MoreUtils qw( any none uniq ); use Scalar::Util qw( blessed refaddr reftype weaken ); -use Storable qw( dclone ); -use Regexp::Copy; +use Clone; use Carp qw( croak ); use overload ( @@ -1115,7 +1114,7 @@ sub _single_output_processor { $arg = { type => $arg }; } elsif ( ref $arg eq 'HASH' ) { - $arg = dclone($arg); + $arg = Clone::clone($arg); } else { croak 'invalid args'; diff --git a/lib/HTML/FormFu/Constraint.pm b/lib/HTML/FormFu/Constraint.pm index b4d86e9..2f725c9 100644 --- a/lib/HTML/FormFu/Constraint.pm +++ b/lib/HTML/FormFu/Constraint.pm @@ -12,7 +12,7 @@ use HTML::FormFu::Util qw( use List::MoreUtils qw( any ); use List::Util qw( first ); use Scalar::Util qw( reftype blessed ); -use Storable qw( dclone ); +use Clone; use Carp qw( croak ); __PACKAGE__->mk_accessors(qw( only_on_reps )); @@ -229,7 +229,7 @@ sub clone { my $clone = $self->next::method(@_); if ( defined( my $when = $self->when ) ) { - $clone->when( dclone $when ); + $clone->when( Clone::clone $when ); } return $clone; diff --git a/lib/HTML/FormFu/Constraint/Set.pm b/lib/HTML/FormFu/Constraint/Set.pm index 1a4fd7c..b2ff35b 100644 --- a/lib/HTML/FormFu/Constraint/Set.pm +++ b/lib/HTML/FormFu/Constraint/Set.pm @@ -4,7 +4,7 @@ use strict; use base 'HTML::FormFu::Constraint'; use Class::C3; -use Storable qw( dclone ); +use Clone; __PACKAGE__->mk_accessors(qw( set )); @@ -26,7 +26,7 @@ sub clone { my $clone = $self->next::method(@_); if ( $self->set ) { - $clone->set( dclone $self->set ); + $clone->set( Clone::clone $self->set ); } return $clone; diff --git a/lib/HTML/FormFu/Constraint/_others.pm b/lib/HTML/FormFu/Constraint/_others.pm index 6abbdae..5f3fa5a 100644 --- a/lib/HTML/FormFu/Constraint/_others.pm +++ b/lib/HTML/FormFu/Constraint/_others.pm @@ -9,7 +9,7 @@ use HTML::FormFu::Util qw( debug ); use List::MoreUtils qw( any none ); -use Storable qw( dclone ); +use Clone; __PACKAGE__->mk_item_accessors( qw( attach_errors_to_base @@ -115,7 +115,7 @@ sub clone { my $clone = $self->next::method(@_); if ( ref $self->others ) { - $clone->others( dclone $self->others ); + $clone->others( Clone::clone $self->others ); } return $clone; diff --git a/lib/HTML/FormFu/Element.pm b/lib/HTML/FormFu/Element.pm index 7d18d4a..20b6dbb 100644 --- a/lib/HTML/FormFu/Element.pm +++ b/lib/HTML/FormFu/Element.pm @@ -24,7 +24,7 @@ use HTML::FormFu::ObjectUtil qw( ); use HTML::FormFu::Util qw( require_class xml_escape ); use Scalar::Util qw( refaddr reftype weaken ); -use Storable qw( dclone ); +use Clone; use Carp qw( croak ); use overload ( @@ -182,11 +182,11 @@ sub clone { my %new = %$self; - $new{tt_args} = dclone $self->{tt_args} + $new{tt_args} = Clone::clone $self->{tt_args} if $self->{tt_args}; - $new{attributes} = dclone $self->attributes; - $new{model_config} = dclone $self->model_config; + $new{attributes} = Clone::clone $self->attributes; + $new{model_config} = Clone::clone $self->model_config; return bless \%new, ref $self; } diff --git a/lib/HTML/FormFu/Element/Block.pm b/lib/HTML/FormFu/Element/Block.pm index da9ff74..3ed5fc6 100644 --- a/lib/HTML/FormFu/Element/Block.pm +++ b/lib/HTML/FormFu/Element/Block.pm @@ -8,7 +8,7 @@ use HTML::FormFu::Constants qw( $EMPTY_STR ); use HTML::FormFu::ObjectUtil qw( :FORM_AND_BLOCK ); use HTML::FormFu::Util qw( _get_elements xml_escape process_attrs ); use List::MoreUtils qw( uniq ); -use Storable qw( dclone ); +use Clone; use Carp qw( croak ); __PACKAGE__->mk_item_accessors( qw( @@ -243,7 +243,7 @@ sub clone { map { $_->parent($clone) } @{ $clone->_elements }; - $clone->default_args( dclone $self->default_args ); + $clone->default_args( Clone::clone $self->default_args ); return $clone; } diff --git a/lib/HTML/FormFu/Element/Multi.pm b/lib/HTML/FormFu/Element/Multi.pm index 7182f02..bf55b26 100644 --- a/lib/HTML/FormFu/Element/Multi.pm +++ b/lib/HTML/FormFu/Element/Multi.pm @@ -7,7 +7,7 @@ use Class::C3; use HTML::FormFu::Element::_Field qw( :FIELD ); use HTML::FormFu::Util qw( append_xml_attribute xml_escape process_attrs _parse_args _get_elements _filter_components ); -use Storable qw( dclone ); +use Clone; __PACKAGE__->mk_item_accessors( qw( field_filename @@ -211,9 +211,9 @@ sub clone { my $clone = $self->next::method(@_); - $clone->comment_attributes( dclone $self->comment_attributes ); - $clone->container_attributes( dclone $self->container_attributes ); - $clone->label_attributes( dclone $self->label_attributes ); + $clone->comment_attributes( Clone::clone $self->comment_attributes ); + $clone->container_attributes( Clone::clone $self->container_attributes ); + $clone->label_attributes( Clone::clone $self->label_attributes ); return $clone; } diff --git a/lib/HTML/FormFu/Element/_Field.pm b/lib/HTML/FormFu/Element/_Field.pm index 9b1f875..4ebef13 100644 --- a/lib/HTML/FormFu/Element/_Field.pm +++ b/lib/HTML/FormFu/Element/_Field.pm @@ -16,7 +16,7 @@ use HTML::FormFu::Util qw( process_attrs _filter_components ); use List::MoreUtils qw( uniq ); -use Storable qw( dclone ); +use Clone; use Carp qw( croak ); use Exporter qw( import ); @@ -991,9 +991,9 @@ sub clone { map { $_->parent($clone) } @{ $clone->$list }; } - $clone->comment_attributes( dclone $self->comment_attributes ); - $clone->container_attributes( dclone $self->container_attributes ); - $clone->label_attributes( dclone $self->label_attributes ); + $clone->comment_attributes( Clone::clone $self->comment_attributes ); + $clone->container_attributes( Clone::clone $self->container_attributes ); + $clone->label_attributes( Clone::clone $self->label_attributes ); return $clone; } diff --git a/lib/HTML/FormFu/Element/_Group.pm b/lib/HTML/FormFu/Element/_Group.pm index 3523f98..08de93a 100644 --- a/lib/HTML/FormFu/Element/_Group.pm +++ b/lib/HTML/FormFu/Element/_Group.pm @@ -9,7 +9,7 @@ use HTML::FormFu::Util qw( append_xml_attribute literal xml_escape ); use Exporter qw( import ); use List::MoreUtils qw( none ); use Scalar::Util qw( reftype ); -use Storable qw( dclone ); +use Clone; use Carp qw( croak ); our @EXPORT_OK = qw( _process_options_from_model ); # used by ComboBox @@ -363,7 +363,7 @@ sub render_data_non_recursive { my ( $self, $args ) = @_; my $render = $self->next::method( { - options => dclone( $self->_options ), + options => Clone::clone( $self->_options ), $args ? %$args : (), } ); @@ -426,7 +426,7 @@ sub clone { my $clone = $self->next::method(@_); - $clone->_options( dclone $self->_options ); + $clone->_options( Clone::clone $self->_options ); return $clone; } diff --git a/lib/HTML/FormFu/Element/reCAPTCHA.pm b/lib/HTML/FormFu/Element/reCAPTCHA.pm index c5975ad..42c2c62 100644 --- a/lib/HTML/FormFu/Element/reCAPTCHA.pm +++ b/lib/HTML/FormFu/Element/reCAPTCHA.pm @@ -117,7 +117,7 @@ sub clone { my $clone = $self->next::method(@_); - $clone->recaptcha_options( dclone $self->recaptcha_options ); + $clone->recaptcha_options( Clone::clone $self->recaptcha_options ); return $clone; } diff --git a/lib/HTML/FormFu/Filter/HTMLScrubber.pm b/lib/HTML/FormFu/Filter/HTMLScrubber.pm index 018273d..b934ed5 100644 --- a/lib/HTML/FormFu/Filter/HTMLScrubber.pm +++ b/lib/HTML/FormFu/Filter/HTMLScrubber.pm @@ -4,7 +4,7 @@ use strict; use base 'HTML::FormFu::Filter'; use Class::C3; -use Storable qw( dclone ); +use Clone; __PACKAGE__->mk_accessors(qw( allow )); @@ -27,7 +27,7 @@ sub clone { my $clone = $self->next::method(@_); - $clone->allow( dclone $self->allow ) + $clone->allow( Clone::clone $self->allow ) if ref $self->allow; return $clone; diff --git a/lib/HTML/FormFu/MultiForm.pm b/lib/HTML/FormFu/MultiForm.pm index a10d67f..2db2156 100644 --- a/lib/HTML/FormFu/MultiForm.pm +++ b/lib/HTML/FormFu/MultiForm.pm @@ -21,7 +21,8 @@ use Carp qw( croak ); use Crypt::CBC; use List::MoreUtils qw( uniq ); use Scalar::Util qw( blessed refaddr reftype ); -use Storable qw( dclone nfreeze thaw ); +use Storable qw( nfreeze thaw ); +use Clone; use overload ( 'eq' => sub { refaddr $_[0] eq refaddr $_[1] }, @@ -234,7 +235,7 @@ sub _load_current_form { my $current_form = HTML::FormFu->new; - my $current_data = dclone( $self->forms->[ $current_form_num - 1 ] ); + my $current_data = Clone::clone( $self->forms->[ $current_form_num - 1 ] ); # merge constructor args for my $key ( @ACCESSORS, @INHERITED_ACCESSORS, @@ -363,7 +364,7 @@ sub next_form { # is there a next form defined? return if $current_form_num >= scalar @{ $self->forms }; - my $form_data = dclone( $self->forms->[$current_form_num] ); + my $form_data = Clone::clone( $self->forms->[$current_form_num] ); my $next_form = HTML::FormFu->new; diff --git a/lib/HTML/FormFu/ObjectUtil.pm b/lib/HTML/FormFu/ObjectUtil.pm index f622f9f..6b73697 100644 --- a/lib/HTML/FormFu/ObjectUtil.pm +++ b/lib/HTML/FormFu/ObjectUtil.pm @@ -13,7 +13,7 @@ use Data::Visitor::Callback; use File::Spec; use Scalar::Util qw( refaddr reftype weaken blessed ); use List::MoreUtils qw( none uniq ); -use Storable qw( dclone ); +use Clone; use Carp qw( croak ); our @form_and_block = qw( @@ -171,7 +171,7 @@ sub _require_element { } ); if ( $element->can('default_args') ) { - $element->default_args( dclone $self->default_args ); + $element->default_args( Clone::clone $self->default_args ); } # handle default_args @@ -526,7 +526,7 @@ sub _load_file { } for my $config ( ref $data eq 'ARRAY' ? @$data : $data ) { - $self->populate( dclone($config) ); + $self->populate( Clone::clone($config) ); } return; @@ -631,9 +631,9 @@ sub clone { my %new = %$self; $new{_elements} = [ map { $_->clone } @{ $self->_elements } ]; - $new{attributes} = dclone $self->attributes; - $new{tt_args} = dclone $self->tt_args; - $new{model_config} = dclone $self->model_config; + $new{attributes} = Clone::clone $self->attributes; + $new{tt_args} = Clone::clone $self->tt_args; + $new{model_config} = Clone::clone $self->model_config; if ( $self->can('_plugins') ) { $new{_plugins} = [ map { $_->clone } @{ $self->_plugins } ]; @@ -641,7 +641,7 @@ sub clone { $new{languages} = ref $self->languages - ? dclone $self->languages + ? Clone::clone $self->languages : $self->languages; $new{default_args} = $self->default_args; diff --git a/t/deprecated/element_defaults.t b/t/deprecated/element_defaults.t index 64a9fb9..1deac8a 100644 --- a/t/deprecated/element_defaults.t +++ b/t/deprecated/element_defaults.t @@ -4,7 +4,7 @@ use warnings; use Test::More tests => 9; use HTML::FormFu; -use Storable qw( dclone ); +use Clone; my $form = HTML::FormFu->new({ tt_args => { INCLUDE_PATH => 'share/templates/tt/xhtml' } }); @@ -23,7 +23,7 @@ _call_element_defaults( $form, { } ); # take a deep copy of element_defaults, so we can check they've not been butchered, later -my $element_defaults = dclone( _call_element_defaults( $form ) ); +my $element_defaults = Clone::clone( _call_element_defaults( $form ) ); $form->populate( { elements => [ diff --git a/t/form/default_args.t b/t/form/default_args.t index 27e83c5..dbfb109 100644 --- a/t/form/default_args.t +++ b/t/form/default_args.t @@ -4,7 +4,7 @@ use warnings; use Test::More tests => 7; use HTML::FormFu; -use Storable qw( dclone ); +use Clone; my $form = HTML::FormFu->new({ tt_args => { INCLUDE_PATH => 'share/templates/tt/xhtml' } }); @@ -31,7 +31,7 @@ $form->default_args( { # take a deep copy of element_defaults, so we can check they've not been butchered, later -my $default_args = dclone( $form->default_args ); +my $default_args = Clone::clone( $form->default_args ); $form->populate( { elements => [ -- 1.7.1

