开发者

Perl - Hyphen and Minus

I have a method where i split terms bounded by white-spaces. I want to remove the minus sign when it is alone like these:

$word =~ s/^\-$//;

The problem is that i cannot visually identify the d开发者_运维技巧ifference between a minus and a hyphen (used for separating two words for example). How can i be sure that i'm only removing the minus sign?


In the ASCII printable character set, the hyphen and minus are the same symbol (ASCII 45), so when you're just scanning printable ASCII text data, whether you remove it or not would really depend on the context. Also, hyphenated words shouldn't contain whitespace, and when used to set apart a phrase -- like this -- you'll usually find two consecutive dashes. So if you're finding the symbol on it's own there's something unusual going on in the file.

To match the En-dash character or Em-dash characters, you'd search for \226 or \227 respectively (the ASCII value in octal).


Try:

#!/usr/bin/env perl

use strict;
use warnings;

while( <DATA> ){

  if( m/(?<=[[:alpha:]])\-(?=[[:alpha:]])/ ){
    print "hyphen: $_";
  }elsif( m/\-/ ){
    print "minus: $_";
  }else{
    print "other: $_";
  }

}

__DATA__
this has hypenated-words.
this is a negative number: -2
some confusing-2 things
-to test it
title -- one-line description


When coding, use a suitable editor. There are many of them, use Google or ask fellow developers. Here's a selection of notepads:

  • Notepad++
  • Programmer's Notepad
  • Notepad2

These editors won't sell you a hyphen for a minus when you clearly hit the minus key on the keyboard. So in about eleven years of programming, I've never faced this problem thanks to using appropriate editing software for coding.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜