UNIXのPerlでは引数は@ARGVに入ると思うのですが、

a.pl *.c

"*.c" という引数を入れるとファイルが展開されそのフォルダの中の "12-1.c" とか "12-2.c" とかいう引数が、配列に1つずつ入ってきました。
引数の文字列を何の修正もなしに(できればスペースも)受け取る方法はないですか?

A 回答 (3件)

a.pl "*.c"



といった具合に引数文字列を二重引用符で括ってみて下さい。
    • good
    • 0
この回答へのお礼

んんん、呼び出し側で制御しなければダメですか?
できれば、呼び出し側では正規表現を記述して、内部でそれに該当するファイルを操作したいと思っているのですが・・・。

お礼日時:2001/12/04 14:40

引数のワイルドカードの展開はスクリプトに渡る前に行われますので、スクリプト内部での制御は無理だと思います。


tujigeさんの仰るような方法があれば出来ると思いますが、それとて別な環境で実行された場合は無効になってしまいます。
ですので、スクリプト自身での制御は不可能、というのが私の意見です。
御参考までに。
    • good
    • 0
この回答へのお礼

わかりました。
使う側でダブルクォートで囲む方法にします。

お礼日時:2001/12/05 15:26

*.c とかは、shell が展開しちゃうので、お使いの shell の設定で展開しないようにしちゃえばいいのでは。



bash 2以上なら、braceexpand (スペル自信なし)というオプションがあったような。。。

今ざっと、bash のマニュアルを読んでみたら、展開するオプションはあったけど、展開しないオプションは見つからなかった。
多分あるのだろう。
    • good
    • 0
この回答へのお礼

使っているのはtcshで、管理者ではないので、ユーザー個別の設定でなんとかできれば良いのですが・・・。

お礼日時:2001/12/05 15:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QCan't locate jcode.pl in @INC...

perlスクリプトをcrontabで、
  0 * * * * /フルパス
と起動したところ、
上記のエラーがでます。
エラー部分は、
  require './jcode.pl';
です。
requireにフルパスを打ったら、直ったんですが、なぜでしょう。
Perlの設定が悪いのでしょうか?

Aベストアンサー

> ということで、環境変数のSCRIPT_FILE_NAMEの最後をカットして、
> jcode.plの前にくっつけるってことで良いでしょうかね。

WebからCGIとして実行した場合と、telnetなどから実行した場合とで、環境変数の中身は変わります。
SCRIPT_FILENAMEはCGIの時しかつかないと思いますので、特殊変数 $0 を参照し
  (my $path = $0) =~ s|/.+?$||;
  require "$path/jcode.pl";
のようにした方が良いでしょう。

Qpack("C",0x61).pack("C",0x62)...を省略

$_=pack("C",0x61).pack("C",0x62).pack("C",0x68)...
こういったバイナリ文字列をもっと簡単に$_=0x61.0x62.0x68のように書けませんか?
$_=0x61.0x62.0x68ではうまくいきませんでした。

Aベストアンサー

1行でできます。
$_=pack("C*",0x61,0x62,0x68);

参考URL:http://polaris.isc.nipr.ac.jp/~yama/jare43/tohoho/wwwperl2.htm#pack

QPerlのクラス(*.pm)からuseする側の*.cgi内ののスカラやハッシュ、配列の参照は可能でしょうか?

 Perlのクラス(*.pm)からuseする側の*.cgi内ののスカラやハッシュ、配列の参照は可能でしょうか?
いろいろなサーバに対応させやすくするため
1行目(Perlのパス)や各種モジュールのパスや設定情報を*.cgiに書いてプログラム本体は*pmに置きたいのです。
それとももっといい方法がございますでしょうか。
 教えて!ください。

Aベストアンサー

モジュールに渡したい変数をハッシュにしておいて、

モジュールのほうで、

sub new{
my $class = shift;
my %param = @_;
my $self = { param => \%param};

return bless($self,$class);
}

useする側では、

my $hoge = new hoge(%in);

とすると、$hoge->{param}でnewで渡したパラメータが読めます。
これを利用すれば大丈夫ではないでしょうか。

Q拡張子を.plにしたら動くけど.cgiにしたら動かない(初歩的)

バカな質問にお答えお願いします。

windows2000
IIS5.0 使用
activeperl?

perlというのを練習でいろいろ
簡単なものを作っています。

自分のPCだけで、動かしてます。
無事動いているのですが、

拡張子を.cgiにすると

%1 なんとかエラー

みたいなのになってしまいます。
なんででしょう?

Aベストアンサー

IISの関連付けがされていないのではないでしょうか?

参考URLは、WindowsXPですが参考になると思いますよ。

ちなみにこういった場合、エラーメッセージをそのままgoogleなどで検索すると解決方法が書かれているサイトが見つかる場合が多いですよ。

参考URL:http://www.mikeneko.ne.jp/~lab/perl/iis/#h1-4-3

Qplファイルの中で他のplファイルを実行

A.plファイルとそれに付随するpmファイルがあります。

別のB.plでA.plに値を渡しながらループさせてA.plを実行し得られた値をB.plに返すことがしたいのですが、

B.plで

ループ始点
require('A.pl');
ループ終点

だと一回きりの実行結果しか得られず。

#`perl A.pl @AAA`;
だとreturnできずエラー

となってしまいます。

何か良い方法は無いでしょうか。

よろしくお願いいたします。

Aベストアンサー

こんな感じでは?

$ head *
==> a.pl <==
print @ARGV;
1;

==> tmp.pl <==
$\ = "\n";
foreach (1..10) {
require ('a.pl');
delete $INC{'a.pl'};
}

$ perl tmp.pl value
value
value
value
value
value
value
value
value
value
value


おすすめ情報