質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

3回答

3791閲覧

ワンライナーでコマンドライン引数のグロブが認識しない

JADEN

総合スコア106

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

0クリップ

投稿2016/07/12 12:03

ワンライナーで、以下のコマンドが失敗します。
なぜ、グロブを認識しないのでしょうか。
perl -p -i.bak -w -e "s/a/z/g" test*.txt

結果
Can't open test*.txt: Invalid argument.

グロブを使用しないファイル名を、コマンドライン引数で渡すと成功します。
type test*.txtは成功します。

test0.txt
a
ab
abc

test1.txt
abcd
abcde
abcdef

環境
OS: Windows 7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Windows だとそうなるようです。
https://teratail.com/questions/40881

type がうまくいくのは、typeが自分で
ワイルドカードを展開しているからみたい。
unix系だとそのへんはシェルが面倒見てくれるんスけどね~

投稿2016/07/12 12:10

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JADEN

2016/07/14 12:27

回答ありがとうございます。 記載URLがこのページになっていますが、意図通りでしょうか。
takasima20

2016/07/14 13:10

あー、失礼。間違えました。
guest

0

ベストアンサー

Windowsのコマンドプロンプトからの起動の場合、CMD.EXEからperl.exeには、test*.txtがそのまま渡るので、受け取ったperl.exeがそれをどう解釈するかです。mingwのperl.exeだと、引数に対してはUnixのシェル相当の展開をしてからユーザープログラムに渡してくれます(つまり*を展開してくれます)。お使いのperl.exeがそういう機能を持ってないのでしょう。

対策は色々考えられます。
*を自動展開するようなperl.exeに切り替える
*を展開してからperl.exeに渡るようなシェルを使う
・cmd.exeのままで行くなら、バッチファイル等を経由してバッチで展開するとか
・自分で*の展開をするようなPerlスクリプトにする

投稿2016/07/12 15:17

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JADEN

2016/07/14 12:28

回答ありがとうございます。 バッチファイルで展開というのは、バッチファイルに書けば自動的に展開されるという訳ではなく、展開をスクリプトで書くということでしょうか。
otn

2016/07/14 14:55

はい、そういうことです。
guest

0

Active Perl をお使いですか?
グロブ(Windows ではワイルドカードと呼びます)はそのままでは使えませんが、使う方法もあるそうです。
Active Perl でワイルドカードを利用する

投稿2016/07/12 14:02

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JADEN

2016/07/14 12:27

回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問