Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: file open with variables

by BillKSmith (Monsignor)
on Sep 28, 2022 at 15:49 UTC ( [id://11147147] : note . print w/replies, xml ) Need Help??


in reply to file open with variables

An alternate way to build a string (your file name) is to use the concatenation ('.') operator (refer: Additive Operators) rather than interpolation. In this case it has the advantage that you keep your single quotes and single backslashes. I have used Test::Simple to verify that I have constructed the string you expect.
use strict; use warnings; use Test::Simple tests=>1; # Expected # my $expected_file_name = 'D:\PROJ\N123_X3\dataInfo_X-4_Y5_decode.csv'; # Given my $X_info = 3; my $Y_info = -4; my $Z_info = 5; my $concatenated_name = 'D:\PROJ\N123_X' . $X_info # 3 . '\dataInfo_X' . $Y_info # -4 . '_Y' . $Z_info # 5 . '_decode.csv' ; ok($concatenated_name eq $expected_file_name, 'concatenation');

OUTPUT:

1..1 ok 1 - concatenation
Bill

Replies are listed 'Best First'.
Re^2: file open with variables
by AnomalousMonk (Archbishop) on Sep 28, 2022 at 23:10 UTC

    An alternative to chained string concatenation is the join built-in. This has the advantage IMHO that it operates on a "pure" list, i.e., one that can be built | built arbitrarily from strings, arrays, function calls, etc.

    Win8 Strawberry 5.8.9.5 (32) Wed 09/28/2022 18:56:53 C:\@Work\Perl\monks >perl use strict; use warnings; use Test::Simple tests=>1; 1..1 # Expected my $expected_file_name = 'D:\PROJ\N123_X3\dataInfo_X-4_Y5_decode.csv'; # Given my $X_info = 3; my $Y_info = -4; my $Z_info = 5; my @intro = ('D:\PROJ\N123_X', $X_info, '\dataInfo_X', $Y_info); my $concatenated_name = join '', @intro, '_Y', $Z_info, '_decode.csv', ; ok($concatenated_name eq $expected_file_name, 'join concatenation'); ^Z ok 1 - join concatenation


    Give a man a fish:  <%-{-{-{-<