App-PTP
view release on metacpan or search on metacpan
lib/App/PTP/Args.pm view on Meta::CPAN
$modes{output_field} = $default_output_field;
},
'bytes' => sub { $modes{input_field} = ''; $modes{output_field} = ''; },
'csv' => sub { $modes{input_field} = '\s*,\s*'; $modes{output_field} = ','; },
'tsv' => sub { $modes{input_field} = '\t'; $modes{output_field} = "\t"; },
'none' => sub { $modes{input_field} = '(?!)' },
'single-quote-replacement|single-quote|sq=s' => sub { $modes{single_quote} = $_[1] },
'double-quote-replacement|double-quote|dq=s' => sub { $modes{double_quote} = $_[1] },
'dollar-sigil-replacement|dollar-sigil|ds=s' => sub { $modes{dollar_sigil} = $_[1] },)
}
sub input_flags {
(
'<>' => sub { push @inputs, $_[0] }, # Any options not matched otherwise.
'' => sub { push @inputs, \$App::PTP::Files::stdin_marker }, # a single '-'
)
}
sub is_int {
my ($str) = @_;
return looks_like_number($str) && int($str) == $str;
}
sub validate_cut_spec {
my ($spec) = @_;
my @fields = split /\s*,\s*/, $spec;
for my $f (@fields) {
die "Fields passed to --cut must all be integers: $f\n" unless is_int($f);
$f-- if $f > 0;
}
return \@fields;
}
# The array associated with each action contains the name of the action, the
# method to call for that action, a copy of the current %modes, and all the
# other arguments that should be passed to the method.
sub action_flags {
(
'grep|g=s' => sub { push @{$cur_pipeline}, ['grep', \&do_grep, {%modes}, $_[1]] },
'substitute|s=s{2}' => sub {
push @{$cur_pipeline}, ['substitute', \&do_substitute, {%modes}, $_[1]];
},
# All the do_perl below could have the same sub using "$_[0]" instead of the
# manually specified name.
'perl|p=s' => sub { push @{$cur_pipeline}, ['perl', \&do_perl, {%modes}, 'perl', $_[1]] },
'n=s' => sub { push @{$cur_pipeline}, ['n', \&do_perl, {%modes}, 'n', $_[1]] },
'filter|f=s' => sub { push @{$cur_pipeline}, ['filter', \&do_perl, {%modes}, 'filter', $_[1]] },
'mark-line|ml=s' => sub {
push @{$cur_pipeline}, ['mark-line', \&do_perl, {%modes}, 'mark-line', $_[1]];
},
'execute|e=s' => sub {
push @{$cur_pipeline}, ['execute', \&do_execute, {%modes}, 'execute', $_[1]];
},
'M=s' => sub { push @{$cur_pipeline}, ['M', \&do_execute, {%modes}, 'M', $_[1]] },
'load|l=s' => sub { push @{$cur_pipeline}, ['load', \&do_load, {%modes}, $_[1]] },
'sort' => sub { push @{$cur_pipeline}, ['sort', \&do_sort, {%modes}] },
'numeric-sort|ns' => sub {
my $opt = {%modes, comparator => \'numeric'};
push @{$cur_pipeline}, ['numeric-sort', \&do_sort, $opt];
},
'locale-sort|ls' => sub {
my $opt = {%modes, comparator => \'locale'};
push @{$cur_pipeline}, ['locale-sort', \&do_sort, $opt];
},
'semver-sort|ss' => sub {
my $opt = {%modes, comparator => \'semver'};
push @{$cur_pipeline}, ['semver-sort', \&do_sort, $opt];
},
'custom-sort|cs=s' => sub {
my $opt = {%modes, comparator => $_[1]};
push @{$cur_pipeline}, ['custom-sort', \&do_sort, $opt];
},
'unique|uniq|u' => sub {
push @{$cur_pipeline},
['unique', \&do_list_op, {%modes}, \&App::PTP::Util::uniqstr, 'together'];
},
'global-unique|guniq|gu' => sub {
push @{$cur_pipeline},
['global-unique', \&do_list_op, {%modes}, \&App::PTP::Util::globaluniqstr, 'together'];
},
'head:i' => sub { push @{$cur_pipeline}, ['head', \&do_head, {%modes}, $_[1]] },
'tail:i' => sub { push @{$cur_pipeline}, ['tail', \&do_tail, {%modes}, $_[1]] },
'reverse|tac' => sub {
push @{$cur_pipeline}, ['reverse', \&do_list_op, {%modes}, sub { reverse @_ }, 'same'];
},
'shuffle' => sub {
push @{$cur_pipeline}, ['shuffle', \&do_list_op, {%modes}, \&List::Util::shuffle, 'none'];
},
'eat' => sub { push @{$cur_pipeline}, ['eat', \&do_eat, {%modes}] },
'delete-marked' => sub {
push @{$cur_pipeline}, ['delete-marked', \&do_delete_marked, {%modes}, 0];
},
'delete-before' => sub {
push @{$cur_pipeline}, ['delete-before', \&do_delete_marked, {%modes}, -1];
},
'delete-after' => sub {
push @{$cur_pipeline}, ['delete-after', \&do_delete_marked, {%modes}, 1];
},
'delete-at-offset=i' => sub {
push @{$cur_pipeline}, ['delete-at-offset', \&do_delete_marked, {%modes}, $_[1]];
},
'insert-before=s' => sub {
push @{$cur_pipeline}, ['insert-before', \&do_insert_marked, {%modes}, -1, $_[1]];
},
'insert-after=s' => sub {
push @{$cur_pipeline}, ['insert-after', \&do_insert_marked, {%modes}, 0, $_[1]];
},
'insert-at-offset=s{2}' => sub {
push @{$cur_pipeline}, ['insert-at-offset', \&do_insert_marked, {%modes}, $_[1]];
},
'clear-markers' =>
sub { push @{$cur_pipeline}, ['clear-markers', \&do_set_markers, {%modes}, 0] },
'set-all-markers' => sub {
push @{$cur_pipeline}, ['set-all-markers', \&do_set_markers, {%modes}, 1];
},
'cut=s' => sub {
push @{$cur_pipeline}, ['cut', \&do_cut, {%modes}, validate_cut_spec($_[1])];
},
'paste=s' => sub { push @{$cur_pipeline}, ['paste', \&do_paste, {%modes}, $_[1]] },
'pivot' => sub { push @{$cur_pipeline}, ['pivot', \&do_pivot, {%modes}, 'pivot'] },
'anti-pivot' => sub {
push @{$cur_pipeline}, ['anti-pivot', \&do_pivot, {%modes}, 'anti-pivot'];
},
( run in 1.319 second using v1.01-cache-2.11-cpan-ceb78f64989 )