Perl形式コメントについてNo.02146
だちょー さん 03/07/05 00:24
 
こんにちは。
私は秀丸でCSHスクリプトの編集をしています。
コメントモードをPerlにしているのですが、配列の要素数の表現が
書き方によって、コメントと取られてしまいます。
 書き方1:$#var   コメントにならない
 書き方2:${#var}  コメントになる
書き方2でもコメントにならないようにしてもらうことはできないでしょうか?
PerlモードにCSHのための変更を入れるのは無理かもしれませんが、
これを回避できるような設定とかがあればそれでもいいのですが・・・

[ ]
RE:02146 Perl形式コメントについてNo.02171
秀まるお さん 03/07/08 13:39
 
>  書き方1:$#var   コメントにならない
>  書き方2:${#var}  コメントになる
> 書き方2でもコメントにならないようにしてもらうことはできないでしょうか?


 現状では、#の直前が$かどうかだけ見てますけど、それに加えて"${"という2
文字が直前にある場合はコメントとしないようにすればいいのでしょうか。だと
したら非常に簡単に対応できます。

 他にも何か例外規則があれば教えてください。

[ ]
RE:02171 Perl形式コメントについてNo.02181
だちょー さん 03/07/08 22:53
 
>>  書き方1:$#var   コメントにならない
>>  書き方2:${#var}  コメントになる
>> 書き方2でもコメントにならないようにしてもらうことはできないでしょうか?
>
>
> 現状では、#の直前が$かどうかだけ見てますけど、それに加えて"${"という2
>文字が直前にある場合はコメントとしないようにすればいいのでしょうか。だと
>したら非常に簡単に対応できます。

ぜひお願いします。

> 他にも何か例外規則があれば教えてください。

cshのmanを確認しました。
#がコメント以外で使用されるのは、以下の2通りでした。
・上記2パターンの配列要素数参照
・\#の記述により通常のキャラクタの#として取り扱う
cshは、文字列を「"」や「'」で囲んだり、囲まなかったり
まちまちなので、\#がむき出しで記述されたりします。




[ ]
RE:02181 Perl形式コメントについてNo.02183
IKKI さん 03/07/08 23:29
 
IKKI です。横から失礼します…

> >>  書き方1:$#var   コメントにならない
> >>  書き方2:${#var}  コメントになる
> >> 書き方2でもコメントにならないようにしてもらうことはできないでしょうか?
> >
> > 現状では、#の直前が$かどうかだけ見てますけど、それに加えて"${"という2
> >文字が直前にある場合はコメントとしないようにすればいいのでしょうか。だと
> >したら非常に簡単に対応できます。
>
> ぜひお願いします。

ちょっと待ってください。書き方2は Perl ではコメントになります
(Perl 5.8.0 で確認)。

新たに csh モードを設けるならともかく、 csh のための変更を Perl モードに入れ
るのはまずくないですか?

[ ]
RE:02181 Perl形式コメントについてNo.02185
ひろ さん 03/07/09 00:34
 
 だちょーさん今日は、ひろです。横から失礼します。
> cshのmanを確認しました。
 CSH と大文字で書かれているので気が付きませんでしたが、csh (C シェル)
のことでしたか。そうすると Perl で近いことが出来たのは、あくまで偶々で
すよね。それなら「Perl のコメントをどうして欲しい」ということではなく、
「csh のモードを用意して欲しい」というまったく別の要望になると思います。
そうしないと Perl のコメント規則も同じなら良いのですが、そうでないなら
本当に Perl を使っている人が不便になってしまいます。
 この事は、だちょーさんは理解されていて、
> PerlモードにCSHのための変更を入れるのは無理かもしれませんが、
と書かれた気もするのですが、csh が Perl とは別物であることが秀まるおさ
んに伝わっていない気がします。
 またもし
・csh のモードを用意して頂ける
・UNIX 系シェルの個々のシェルは、ほとんど同じだがコメントの処理で違う
  部分が若干ある
   行頭に # を書いてコメントとするぐらいしかしないので、詳細を知らな
  いのね〜(^^;。
の両方を満たすなら、モードとしては「UNIX 系シェル・スクリプト」で「プ
ロパティ」に「csh」「bash」「sh」等となっていた方が自然な気がします。

 ##位置づけとしては、「バッチ・ファイルのモードを用意して欲しい」と同
じだもんなあ〜。

[ ]
RE:02183 Perl形式コメントについてNo.02200
だちょー さん 03/07/10 00:59
 
>ちょっと待ってください。書き方2は Perl ではコメントになります
>(Perl 5.8.0 で確認)。
>
>新たに csh モードを設けるならともかく、 csh のための変更を Perl モードに入
>れるのはまずくないですか?

そうですか。
これじゃあまずいですね。

[ ]
RE:02185 Perl形式コメントについてNo.02201
だちょー さん 03/07/10 01:10
 
> CSH と大文字で書かれているので気が付きませんでしたが、csh (C シェル)

すみません。気をつけます。(^^;

>そうしないと Perl のコメント規則も同じなら良いのですが、そうでないなら
>本当に Perl を使っている人が不便になってしまいます。
> この事は、だちょーさんは理解されていて、
>> PerlモードにCSHのための変更を入れるのは無理かもしれませんが、
>と書かれた気もするのですが、csh が Perl とは別物であることが秀まるおさ
>んに伝わっていない気がします。

おっしゃる通りです。
Perlの規則からはみ出してしまうのはまずいですね。
(私はPerlの規則を知らずにリクエストしてます)

>の両方を満たすなら、モードとしては「UNIX 系シェル・スクリプト」で「プ
>ロパティ」に「csh」「bash」「sh」等となっていた方が自然な気がします。

これだと最高なんですけどね。

[ ]
RE:02201 Perl形式コメントについてNo.02204
秀まるお さん 03/07/10 11:02
 
 今さらのコメントですが、現状のPerlとは別に、UNIX系シェルスクリプトのカ
ラー構文対応をするということにさせていただきます。

 ただし、いろいろ構文を調べる必要があるので、しばらく保留させていただき
ます。

[ ]
RE:02204 Perl形式コメントについてNo.02236
だちょー さん 03/07/11 01:00
 
> 今さらのコメントですが、現状のPerlとは別に、UNIX系シェルスクリプトのカ
>ラー構文対応をするということにさせていただきます。
>
> ただし、いろいろ構文を調べる必要があるので、しばらく保留させていただき
>ます。

楽しみにしてます。

[ ]
RE:02171 Perl形式コメントについてNo.02246
ひろ さん 03/07/11 17:16
 
 秀まるおさん今日は、ひろです。
>  他にも何か例外規則があれば教えてください。
 本題については終わっていますが、未修正の不具合を探していて見つけました。
foreach $hoge (@pongee) {
    if ( $TEST =~ /#/ ) {
        print $hoge."\n";
    }
}
というソースで、2 行目はコメントとならないそうです。
http://hidemaruo.dip.jp:81/hidesoft/hidesoft_2/x11701.html#11707

 「"」や「'」と同様、「()」は閉じられるまで例外だと思うのですが、どな
たか Perl の文法に詳しい方のフォローを希望します。

[ ]
RE:02246 Perl形式コメントについてNo.02254
kaisan さん 03/07/11 22:59
 
秀まるおさん、ひろさん今晩は

>  「"」や「'」と同様、「()」は閉じられるまで例外だと思うのですが、どな
これは違います。

 /〜/
の間が例外になりますが、割り算と区別する必要があります。
正しくは解りませんが、直前のスペース/タブ以外の文字が次のもの以外の場合で
よいと思います。

・英数字及び'_'(変数名に使えるもの)
・閉じ括弧類
・$


この他に以下の例外があります。
・`〜`      ・・・バッククオート

・q(〜)
・qq(〜)
・qw(〜)
・qx(〜)

・qr(〜)
・m(〜)
・tr/〜/〜/
・s/〜/〜/

注意:
 ・「/」は任意の文字で、開始と終了で同じ文字を使います。
  例)s|/usr/|/var/|

 ・「()」は任意の文字が利用できる事に加え、
  開始文字が括弧の場合は対応する閉じ括弧で終了します。
  例)m(/usr/)   と m|/usr/| は同じ。

 ・「\」で終了文字をクオートできます。

まだ他にもピュアドキュメント等が有ります。
誰かフォローしてください。

[ ]
RE:02254 Perl形式コメントについてNo.02256
でるもんた さん 03/07/11 23:56
 
こんばんは、でるもんたです。

>  /〜/
> の間が例外になりますが、割り算と区別する必要があります。
> 正しくは解りませんが、直前のスペース/タブ以外の文字が次のもの以外の場合で
> よいと思います。
...
> この他に以下の例外があります。
> ・`〜`      ・・・バッククオート
>
> ・q(〜)
> ・qq(〜)
> ・qw(〜)
> ・qx(〜)
>
> ・qr(〜)
> ・m(〜)
> ・tr/〜/〜/
> ・s/〜/〜/
>
> 注意:
>  ・「/」は任意の文字で、開始と終了で同じ文字を使います。
>   例)s|/usr/|/var/|
>
>  ・「()」は任意の文字が利用できる事に加え、
>   開始文字が括弧の場合は対応する閉じ括弧で終了します。
>   例)m(/usr/)   と m|/usr/| は同じ。
>
>  ・「\」で終了文字をクオートできます。

このへんは、かなり高度な文法解析を要すると思います。
ちょっと私の頭では簡単な正規表現で書き下せそうにありません。

たとえば、
if ( $hoge =~ /fuga/)
if ( $hoge =~ m/fuga/)
if ( $hoge =~ m#fuga#)
はぜんぶ同じ意味(変数 $hoge が正規表現 fuga にマッチするかどうかを調べる)で、
ここの # はコメントになりません。

んじゃ # の直前に m、s、tr、y といった文字がある場合はコメント扱いしないと
いうルールを組み込めばいいかというと、

if ($hoge == $ummm#ここから先はコメント
) #やっと括弧が閉じた

といったケースはどうするのか、と難しい問題になります。

というわけで、どこまで対応してどこからは不対応とするのかの線引きが必要だと
思います。

Emacs あたりでどう処理しているのかを調べれば話は手っ取り早いんですが、
Emacs(厳密に言えば、強調表示関係はマクロ=Emacs Lisp=で処理しているので、
付属の Lisp コードのほう)は GNU GPL だからおいそれと見るわけにもいかないし…

[ ]
RE:02236 Perl形式コメントについてNo.02299
秀まるお さん 03/07/18 11:14
 
 今さらのコメントですが、ひろさん&kaisanさん&でるもんたさんの話を見て、
UNIXシェルスクリプトのコメントカラー化が非常に難しいことを理解しました。

 とりあえず、

 $#    はコメントにしない。
 ${#   もコメントにしない。

 だけ実装して、それを「シェルスクリプト系」という1つのカラーモードって
ことにします。

[ ]
RE:02299 Perl形式コメントについてNo.02300
ひろ さん 03/07/18 12:52
 
 秀まるおさん今日は、ひろです。
>  今さらのコメントですが、ひろさん&kaisanさん&でるもんたさんの話を見て、
> UNIXシェルスクリプトのコメントカラー化が非常に難しいことを理解しました。
 私の投稿した返信一がよくなかったと思うのですが、kaisanさんとでるもん
たさんが参加された
http://www.maruo.co.jp/turukame/3/x02146_.html#2246
のスレッドは、Perl についてです。

 UNIX 系シェルについては、基本は「#」から行末までがコメントで、私の
知っている例外は、
(1) 文字列
    「"」若しくは「'」で括られた部分
(2) ファイル先頭で「#!」ではじまる場合
    コメントとして扱っても実際は困らないと思う
です。

[ ]
RE:02300 Perl形式コメントについてNo.02306
でるもんた さん 03/07/18 20:27
 
でるもんたです。

>  私の投稿した返信一がよくなかったと思うのですが、kaisanさんとでるもん
> たさんが参加された
> http://www.maruo.co.jp/turukame/3/x02146_.html#2246
> のスレッドは、Perl についてです。

はい。Perl については s#〜#〜# のような例外が山のようにあるので、一筋縄
ではいかないと思います。

>  UNIX 系シェルについては、基本は「#」から行末までがコメントで、私の
> 知っている例外は、
> (1) 文字列
>     「"」若しくは「'」で括られた部分
> (2) ファイル先頭で「#!」ではじまる場合
>     コメントとして扱っても実際は困らないと思う
> です。

これはシェルの種類にもよって大きく左右される問題でして…
sh/bash 系と csh/tcsh 系ではけっこう文法が違います。

少なくとも csh/tcsh 系では $#hoge とか ${#hoge} とかいう書き方が存在します。

私自身は色分け機能は使わないので積極的にテストに協力できなくて申し訳ない
のですが、
  $# はコメントではない
  ${…} の中の # もコメントではない
ということでよろしくお願いいたします。

sh/csh/tcsh の文法については
http://www.jp.freebsd.org/man-jp/search.html
で読めます。

bash/zsh は、英語になりますが
http://www.freebsd.org/cgi/man.cgi
で FreeBSD 5.0 Ports-RELEASE を選択して検索すると読むことができます。

[ ]
RE:02306 Perl形式コメントについてNo.02307
安久津 さん 03/07/18 21:00
 
あくつです。

>>  UNIX 系シェルについては、基本は「#」から行末までがコメントで、私の
>> 知っている例外は、
>> (1) 文字列
>>     「"」若しくは「'」で括られた部分
>> (2) ファイル先頭で「#!」ではじまる場合
>>     コメントとして扱っても実際は困らないと思う
>> です。
>
>これはシェルの種類にもよって大きく左右される問題でして…
>sh/bash 系と csh/tcsh 系ではけっこう文法が違います。
>
>少なくとも csh/tcsh 系では $#hoge とか ${#hoge} とかいう書き方が存在します。
>
>私自身は色分け機能は使わないので積極的にテストに協力できなくて申し訳ない
>のですが、
>  $# はコメントではない
>  ${…} の中の # もコメントではない
>ということでよろしくお願いいたします。

bash で関係する部分だけ書きます。

$ echo " # is in a string."
 # is in a string.
$ echo \" # comment
"
$ var=abcXYZabc
$ echo ${var#[a-z]}
bcXYZabc
$ echo ${var#*[A-Z]}
YZabc
$ echo ${var##*[A-Z]}
abc
$ echo ${var/%abc/---}
abcXYZ---
$ echo ${var/#abc/---}
---XYZabc
$ echo {a,b,c}\${#,$,@}
a${#,$,@} b${#,$,@} c${#,$,@}
$ num=ff
$ echo $(( 16#$num ))
255
$ echo $(( 2#11111111 ))
255
$ echo {a,b,c}\#{x,y,z}
a#x a#y a#z b#x b#y b#z c#x c#y c#z
$ echo {a,b,c}#{x,y,z}
a#x a#y a#z b#x b#y b#z c#x c#y c#z
$ echo {a,b,c}{#,$,@}
a# a$ a@ b# b$ b@ c# c$ c@
$ cat a.sh
#!/usr/bin/env bash
cat <<*EOD*
  # in a string.
*EOD*

$ ./a.sh
  # in a string.
$ cat b.sh
#!/usr/bin/env bash
cat <<**EOD** # hello
 world
**EOD**

$ ./b.sh
 world
$ cat c.sh
#!/usr/bin/env bash
cat << .
Hello $USER
.

$ ./c.sh
Hello ta
$

[ ]
RE:02307 Perl形式コメントについてNo.02508
秀まるお さん 03/07/30 14:38
 
 今さらのコメントですが、やはりUNIXシェルスクリプトのカラー化には対応で
きないです。

 しかし、Perlのカラー化をそのままシェルスクリプトに使っておられる例もあ
るとのことなので、とりあえず現状維持のまま放置してみます。

[ ]
RE:02508 Perl形式コメントについてNo.02530
だちょー さん 03/07/30 21:24
 
> 今さらのコメントですが、やはりUNIXシェルスクリプトのカラー化には対応で
>きないです。
>
> しかし、Perlのカラー化をそのままシェルスクリプトに使っておられる例もあ
>るとのことなので、とりあえず現状維持のまま放置してみます。

とても残念です・・・
でも、現状の

> $#    はコメントにしない。
> ${#   もコメントにしない。

でも十分満足してますので、これがなくなりませんように・・・

[ ]
RE:02530 Perl形式コメントについてNo.02531
秀まるお さん 03/07/30 21:59
 
 簡単に対応できる例で具体的な物があれば連絡ください。例えば何とかの文字
の直後のなんとかは例外扱いだとか、そういう法則が決まっていれば適当に対応
できます。

 ロジックを自分で考えるのは大変です。

[ ]
RE:02531 Perl形式コメントについてNo.02532
だちょー さん 03/07/30 22:47
 
> 簡単に対応できる例で具体的な物があれば連絡ください。例えば何とかの文字
>の直後のなんとかは例外扱いだとか、そういう法則が決まっていれば適当に対応
>できます。

\# は、大抵のシェルではコメントではなく文字の#となります。
少なくともsh、bash、csh、kshではこの扱いです。
文字とならないシェルがあるかどうかまでは分かりませんが。

例)
echo \#

[ ]
RE:02532 Perl形式コメントについてNo.02538
秀まるお さん 03/07/31 10:22
 
 ではさっそくそれも採用させていただきます。


[ ]