As always, There Is More Than One Way To Do It. If you're certain that the grep condition will always match exactly one element of @files:
However, none of the above solutions provide protection against the case that @files does not contain exactly one string matching the pattern, which is why I suggested the extra array. <update> AnomalousMonk showed a way to add the check to the second of my examples above. To add a check to the other two, </update> you could theoretically search the array a second time, using grep in scalar context (if ( grep({/_CF_/} @files)!=1 ) { die ... }), but that's fairly wasteful and you'll have duplicated code (the grep block). Of course, you can also write an explicit loop:
my $ScontrolFile; for my $file (@files) { if ( $file =~ /_CF_/ ) { die "more than one _CF_ file found in: @files" if defined $ScontrolFile; $ScontrolFile = $file; } } die "_CF_ file not found in: @files" unless defined $ScontrolFile;
Update: Added check for >1 file in the above code, and see update in text.
In reply to Re^3: Setting a Variable from filename
by haukex
in thread Setting a Variable from filename
by UpMaBigKilt
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |