From be98186beb6c7cb06f7039f9a89dab2854dd90d6 Mon Sep 17 00:00:00 2001 From: Ryan Voots Date: Sun, 26 Mar 2017 23:12:10 -0700 Subject: [PATCH] An ill advised and ill fated attempt to automate testing things for @INC including "." --- test.pl | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 test.pl diff --git a/test.pl b/test.pl new file mode 100644 index 0000000..f663f2c --- /dev/null +++ b/test.pl @@ -0,0 +1,56 @@ +#!/usr/bin/env perl +use 5.22.0; + +package Module; +use Moose; + +has 'name' => (is => 'ro'); +has 'version' => (is => 'ro'); + +has 'depends' => ( + default => sub {my $self=shift; get_deps($self->name)}, + is => 'ro', + isa => 'ArrayRef[Module]', + lazy => 1, +); + +our %cache; + +sub new_module { + my $class = shift; + my $module = shift; + chomp $module; + my ($name, $version) = split (/[\-~]/, $module); + + return $cache{$name} if exists $cache{$name}; + + $cache{$name} = Module->new(name => $name); +} + +sub get_deps { + my $module = shift; + + return [] if $module eq 'perl'; + + open(my $ph, "-|", qw/cpanm --quiet --showdeps/, $module); + + return [map {Module->new_module($_)} <$ph>]; +} + +sub print_deps { + my ($self, $level, $v) = @_; + + for my $dep ($self->depends->@*) { + my $name = $dep->name; + print ((" " x $level), $name, "\n"); + $dep->print_deps($level+1, [@$v, $name]) unless ($name ~~ @$v); + } +} + +use strict; +use autodie; +use warnings; +use Data::Dumper; + +my $foo = Module->new_module('Moose'); +$foo->print_deps(0, []);