Perl - дефис и минус - PullRequest
       3

Perl - дефис и минус

1 голос
/ 06 мая 2011

У меня есть метод, где я делю термины, ограниченные пробелами.Я хочу удалить знак минус, когда он один, например:

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

Проблема в том, что я не могу визуально определить разницу между минусом и дефисом (например, используется для разделения двух слов).Как я могу быть уверен, что удаляю только знак минус?

Ответы [ 3 ]

3 голосов
/ 06 мая 2011

В наборе печатаемых символов ASCII дефис и минус - это один и тот же символ (ASCII 45), поэтому при сканировании только текстовых данных ASCII, которые можно распечатать, их удаление или отсутствие зависит от контекста. Кроме того, дефисные слова не должны содержать пробелов, и когда они используются для выделения фразы - как это - вы обычно найдете две последовательные черты. Так что, если вы находите символ самостоятельно, в файле происходит что-то необычное.

Чтобы соответствовать символу En-dash или Em-dash, вы должны искать \ 226 или \ 227 соответственно (значение ASCII в восьмеричном).

2 голосов
/ 06 мая 2011

Попробуйте:

#!/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
0 голосов
/ 06 мая 2011

При кодировании используйте подходящий редактор. Их много, воспользуйтесь Google или спросите коллег-разработчиков. Вот выбор блокнотов:

Эти редакторы не будут продавать вам дефис за минус, когда вы четко нажмете клавишу минус на клавиатуре. Таким образом, за одиннадцать лет программирования я никогда не сталкивался с этой проблемой благодаря использованию соответствующего программного обеспечения для редактирования для кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...