in reply to Regular experssion for starts with doesn't work

a regular expression without the =~ operator tests the $_ scalar. but it seems that you intended $line to hold each lines of the java source code. if that is not true, forget my posting... ;)

you can use (nearly) any other character as delimiters to regular expressions. that is sometimes useful if the slash is to be matched against, for example:
if (m.^//.) ...
should work, too.

Replies are listed 'Best First'.
Re: Re: Regular experssion for starts with doesn't work
by diotalevi (Canon) on Sep 20, 2002 at 05:54 UTC

    You'll also want to note that other constructs where comment like sequences can appear inside of strings or be commented out themselves. You've assumed all comment sequences begin at the start of the line. You could at least use optional leading whitespace.

    Java sequences you didn't consider

    String comment_a = "/* this is not a comment */'; String comment_b = "" + // /* "this is actually used" + // */ "";

    You'll probably want to go to java.sun.com for the actual grammar used for parsing Java. That is ... unless someone else has written a grammar already. The reference is at http://java.sun.com/docs/books/jls/second_edition/html/jTOC.doc.html and it doesn't look *too* involved...

    This is a slightly cleaned up version of what you originally posted with some fixes for legibility.

    if ( length $line ) { if ($line =~ m|^\s* // |x or $line =~ m|^\s* /\* |x or $line =~ m|^\s* \* |x) { $comment = $comment + 1; } else { print "$line\n"; $code = $code + 1; } }