#!/usr/bin/perl
use strict;
use warnings;
use utf8;
# for over 4 digits
my $digit = qr{\d(?:\d){3,}};
my $digit_with_comma = qr{\d{1,3}(?:,(?:\d){3})+};
my $regex1 = qr{\\${digit}-{0,1}};
my $regex2 = qr{\\${digit_with_comma}-{0,1}};
my $regex3 = qr{${digit}円};
my $regex4 = qr{${digit_with_comma}円};
my $text = do {local $/ = undef; <DATA>};
my @prices = ($text =~ m/$regex1|$regex2|$regex3|$regex4/g);
binmode STDOUT, ":encoding(utf8)";
print $_, $/ for @prices;
__DATA__
-- normal pattern1
\1234
\12345
\123456
\1234567
\1,234
\12,345
\123,456
\1,234,567
-- normal pattern2
\1234-
\12345-
\123456-
\1234567-
\1,234-
\12,345-
\123,456-
\1,234,567-
-- normal pattern3
1234円
12345円
123456円
1234567円
1,234円
12,345円
123,456円
1,234,567円
-- error pattern1
\123
\123-
123円
-- error pattern2
1234
1234-
1234yen
1,234
1,234-
1,234yen
-- error pattern3
1 234
1 234-
1 234円
お礼
回答有難うございます。 なるほどこうすればよいのか?と納得です。 読むのと書くのでは雲泥差があるように思えました。 自身では書け無いので本当に助かりました。