use strict; use warnings; open(P4, "p4 files //...#have |") || die "could not open pipe p4 files\n"; my %made; while () { # clean up the file name chomp; s/#.*//; # create the subdirectory tree my @dirs = split /\//; my $fileName = pop @dirs; my $built = ""; foreach my $dir (@dirs) { if ($dir ne "") { $built .= "/" if ($built ne ""); $built .= $dir; if (!defined $made{$built}) { if (!-d $built) { mkdir $built || die "mkdir failed $built\n"; } $made{$built} = 1; } } } open(F, ">" . $built . "/" . $fileName) || die "could not open $fileName for writing\n"; print F $_, "\n"; close(F); } close(P4);