geertvc has asked for the wisdom of the Perl Monks concerning the following question:

First time ever post here...

I have an array with directory names:
my @codeOutputDirs = ( "output/$harvester$flavour/layout", "output/$harvester$flavour/tabview", "output/$harvester$flavour/udw", "output/$harvester$flavour/values", "output/$harvester$flavour/udw/service", "output/$harvester$flavour/udw/cfg" );
The variables $harvester and $flavour are passed as parameters on the command line when calling the Perl script.

I want to use a for loop to go through the array and do some stuff like so:
make_path "output/$harvester$flavour/layout"; unlink glob "output/$harvester$flavour/layout/*.*";
And this, for each and every element in the array.

For this, I'm using the following Perl-ish (I guess?) way of traversing through each and every element of the array:
for (@codeOutputDirs) { make_path $_; unlink glob $_/*.*; }
The first command, make_path $_; is fine.
However, the second command has issues when I append /*.* to the default variable $_

Can someone tell me how to accomplish this using the correct syntax? Putting $_ between {} doesn't seem to be the solution.

Best,
--Geert

Replies are listed 'Best First'.
Re: Appending /*.* to default Perl variable $_
by Athanasius (Archbishop) on May 26, 2020 at 07:47 UTC

    Hello geertvc, and welcome to the Monastery!

    The glob function expects an expression which evaluates to a string, so use either unlink glob "$_/*.*"; or unlink glob $_ . '/*.*';. (The latter form uses . as the concatenation operator.)

    BTW, “has issues” isn’t very informative! In future, please detail the warning or error message(s) you are getting.

    Hope that helps,

    Update: Added forward slash to the concatenation example. Thanks, AnomalousMonk!

    Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

      Thanks guys for the swift answer.

      Apologies too for not being punctual in my description. Will take it with me for the next question.

      Best,
      --Geert
Re: Appending /*.* to default Perl variable $_
by jwkrahn (Abbot) on May 26, 2020 at 07:44 UTC

    You need to put that in quotes:

    unlink glob "$_/*.*";