App-PickRandomLines

 view release on metacpan or  search on metacpan

script/pick-random-lines  view on Meta::CPAN

#
#This software is copyright (c) 2022, 2018, 2015, 2014 by perlancar <perlancar@cpan.org>.
#
#This is free software; you can redistribute it and/or modify it under
#the same terms as the Perl 5 programming language system itself.
#
#=head1 BUGS
#
#Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Normalize>
#
#When submitting a bug or request, please include a test-file or a
#patch to an existing test-file that illustrates the bug or desired
#feature.
#
#=cut
### Data/Sah/Resolve.pm ###
#package Data::Sah::Resolve;
#
#our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
#our $DATE = '2021-07-29'; # DATE
#our $DIST = 'Data-Sah-Resolve'; # DIST
#our $VERSION = '0.011'; # VERSION
#
#use 5.010001;
#use strict;
#use warnings;
#
#use Exporter qw(import);
#our @EXPORT_OK = qw(resolve_schema);
#
#sub _clset_has_merge {
#    my $clset = shift;
#    for (keys %$clset) {
#        return 1 if /\Amerge\./;
#    }
#    0;
#}
#
#sub _resolve {
#    my ($opts, $res) = @_;
#
#    my $type = $res->{type};
#    die "Cannot resolve Sah schema: circular schema definition: ".
#        join(" -> ", @{$res->{resolve_path}}, $type)
#        if grep { $type eq $_ } @{$res->{resolve_path}};
#
#    unshift @{$res->{resolve_path}}, $type;
#
#    # check whether $type is a built-in Sah type
#    (my $typemod_pm = "Data/Sah/Type/$type.pm") =~ s!::!/!g;
#    eval { require $typemod_pm; 1 };
#    my $err = $@;
#    unless ($err) {
#        # already a builtin-type, so we stop here
#        return;
#    }
#    die "Cannot resolve Sah schema: can't check whether $type is a builtin Sah type: $err"
#        unless $err =~ /\ACan't locate/;
#
#    # not a type, try a schema under Sah::Schema
#    my $schmod = "Sah::Schema::$type";
#    (my $schmod_pm = "$schmod.pm") =~ s!::!/!g;
#    eval { require $schmod_pm; 1 };
#    die "Cannot resolve Sah schema: not a known built-in Sah type '$type' (can't locate ".
#        "Data::Sah::Type::$type) and not a known schema name '$type' ($@)"
#            if $@;
#    no strict 'refs';
#    my $sch2 = ${"$schmod\::schema"};
#    die "Cannot resolve Sah schema: BUG: Schema module $schmod doesn't contain \$schema"
#        unless $sch2;
#    $res->{type} = $sch2->[0];
#    unshift @{ $res->{clsets_after_type} }, $sch2->[1];
#    _resolve($opts, $res);
#}
#
#sub resolve_schema {
#    my $opts = ref($_[0]) eq 'HASH' ? shift : {};
#    my $sch = shift;
#
#    # normalize
#    unless ($opts->{schema_is_normalized}) {
#        require Data::Sah::Normalize;
#        $sch =  Data::Sah::Normalize::normalize_schema($sch);
#    }
#
#    my $res = {
#        v => 2,
#        type => $sch->[0],
#        clsets_after_type => [$sch->[1]],
#        resolve_path => [],
#    };
#
#    # resolve
#    _resolve($opts, $res);
#
#    # determine the "base restrictions" base
#    my @clsets_have_merge;
#    my $has_merge_prefixes; # whether any of the clsets have merge prefixes
#    for (@{ $res->{clsets_after_type} }) {
#        push @clsets_have_merge, _clset_has_merge($_);
#        $has_merge_prefixes++ if $clsets_have_merge[-1];
#    }
#    # TODO: sanity check: the innermost base schema should not have merge prefixes
#    my $idx = $#clsets_have_merge;
#    while ($idx >= 0) {
#        if ($opts->{allow_base_with_no_additional_clauses}) {
#            last if !$clsets_have_merge[$idx];
#        } else {
#            last if keys(%{$res->{clsets_after_type}[$idx]}) > 0 && !$clsets_have_merge[$idx];
#        }
#        $idx--;
#    }
#    #use DD; dd $res->{clsets_after_type}; dd \@clsets_have_merge;
#    $res->{base} = $res->{resolve_path}[$idx];
#    $res->{clsets_after_base} = [grep {keys(%$_) > 0} @{ $res->{clsets_after_type} }[$idx .. $#clsets_have_merge]];
#
#    # merge
#    my @merged_clsets;
#  MERGE: {
#        unless ($has_merge_prefixes) {
#            @merged_clsets = grep { keys(%$_)>0 } @{ $res->{clsets_after_type} };
#            last;
#        }
#        @merged_clsets = ($res->{clsets_after_type}[0]);
#        for my $i (1 .. $#clsets_have_merge) {
#            my $clset = $res->{clsets_after_type}[$i];
#            next unless keys(%$clset) > 0;
#            if ($clsets_have_merge[$i]) {
#                state $merger = do {



( run in 1.050 second using v1.01-cache-2.11-cpan-39bf76dae61 )