Ask a Question related to Ruby, Design and Development.
-
Simon Strandgaard #1
$& write-protected?
I am working on a regexp engine written entirely in Ruby.
I wish to test it against the rubicon testsuite, its using $& and $1-$9
heavily.
How do I assign my regexp-result to $& ?
irb(main):001:0> $& = "test"
SyntaxError: compile error
(irb):1: Can't set variable $&
from (irb):1
irb(main):002:0>
--
Simon Strandgaard
Simon Strandgaard Guest
-
Attempted to read or write protected memory
I am attempting to convert a PDF document into a jpg image. I have the code in place and understand how it works: Dim a As New Acrobat.AcroPDDoc()... -
C3 with pwd protected site
I am using c3 on a mac and attempting to set it up with a windows server that a co worker has successfully accessed with c4 on windows. I am able to... -
write to database without giving write permission to IIS
Hi there, I have some ASP code that writes to access database. For security reason I do not want IUSER to give write permission to database... -
re protected files
does anybody know how to remove a protected file called lorraine its a pain it corupts my pc so i cant use it for an hour plz help thanx -
Difference between "Protected WithEvents myClassName" And "Protected myClassName" ?
Hello, what is the difference between a) Protected WithEvents myClassName b) Protected myClassName Thanks, Andreas -
ts #2
Re: $& write-protected?
>>>>> "S" == Simon Strandgaard <none> writes:
S> How do I assign my regexp-result to $& ?
$& is read-only
S> irb(main):001:0> $& = "test"
it depend what you want to do
/test/ =~ "test" # $& ==> "test"
--
Guy Decoux
ts Guest
-
Simon Strandgaard #3
Re: $& write-protected?
ts <decoux@moulon.inra.fr> skrev i en
nyhedsmeddelelse:rfcad6s62gg.fsf@moulon.inra.fr...That will work. But I also need to so assignment to $1 - $9, $', $`, $+>> >>>>> "S" == Simon Strandgaard <none> writes:
> S> How do I assign my regexp-result to $& ?
>
> $& is read-only
>
> S> irb(main):001:0> $& = "test"
>
> it depend what you want to do
>
> /test/ =~ "test" # $& ==> "test"
Any ideas how to fake this?
Any rationale why they are write-protected?
--
Simon Strandgaard
Simon Strandgaard Guest
-
ts #4
Re: $& write-protected?
>>>>> "S" == Simon Strandgaard <none> writes:
S> Any ideas how to fake this?
Well, it's easy to do for $' and $`, no idea for the rest $1, ...
S> Any rationale why they are write-protected?
These variables are the result of a regexp against a string : it seems a
non sense to change this result.
--
Guy Decoux
ts Guest
-
Simon Strandgaard #5
Re: $& write-protected?
On Wed, 19 Nov 2003 13:49:27 +0100, ts wrote:
Aree, these values should only contain output from regexp.>>>>>>> "S" == Simon Strandgaard <none> writes:
> S> Any ideas how to fake this?
>
> Well, it's easy to do for $' and $`, no idea for the rest $1, ...
>
> S> Any rationale why they are write-protected?
>
> These variables are the result of a regexp against a string : it seems a
> non sense to change this result.
But as a paradox I am developing my own regexp engine!
I want my regexp engine to be compatible with Ruby's, therefore I want to
exercise the engine with the Rubicon testsuite. But rubicon uses $& and
$1-$9. I can substitute all occurencies of $& and $1-$9 in rubicon.
If $& and $1-$9 assignment are impossible, then, then my regexp-engine
never will get compatible with Ruby's engine :-(
[RCR] remove write-protection of $&, $1-$9, $', $`, $+
or perhaps let them stay write-protected, but let assignment via const_set
become possible?
--
Simon Strandgaard
Simon Strandgaard Guest
-
ts #6
Re: $& write-protected?
>>>>> "S" == Simon Strandgaard <qj5nd7l02@sneakemail.com> writes:
S> I want my regexp engine to be compatible with Ruby's, therefore I want to
S> exercise the engine with the Rubicon testsuite. But rubicon uses $& and
S> $1-$9. I can substitute all occurencies of $& and $1-$9 in rubicon.
Be carefull with this test : it was designed for the *current* regexp
engine, this means, for example, that these tests must be modified for
Onigurama. Because Oniguruma will give different results.
S> [RCR] remove write-protection of $&, $1-$9, $', $`, $+
No need for this : just write an C extension which do this, and use this
extension *only* for testing your regexp engine.
Nobody, except you, need to modify these variables.
Guy Decoux
ts Guest
-
Yukihiro Matsumoto #7
Re: $& write-protected?
Hi,
In message "Re: $& write-protected?"
on 03/11/19, Simon Strandgaard <qj5nd7l02@sneakemail.com> writes:
|[RCR] remove write-protection of $&, $1-$9, $', $`, $+
|or perhaps let them stay write-protected, but let assignment via const_set
|become possible?
If you update $~ (the match result), $&, $1, etc. would follow
accordingly. So that the better RCR should be to create MatchData
without built-in regular expression match, I think.
matz.
Yukihiro Matsumoto Guest
-
Simon Strandgaard #8
Re: $& write-protected?
On Wed, 19 Nov 2003 23:01:50 +0900, ts wrote:
I have about 150 testcases which I both test with Ruby's current regexp>>>>>>> "S" == Simon Strandgaard <qj5nd7l02@sneakemail.com> writes:
> S> I want my regexp engine to be compatible with Ruby's, therefore I want to
> S> exercise the engine with the Rubicon testsuite. But rubicon uses $& and
> S> $1-$9. I can substitute all occurencies of $& and $1-$9 in rubicon.
>
> Be carefull with this test : it was designed for the *current* regexp
> engine, this means, for example, that these tests must be modified for
> Onigurama. Because Oniguruma will give different results.
engine and against my own engine. So far my engine is fully compatible.
Perhaps I should also run the tests agains Oniguruma.
Do you know if Oniguruma can coexist with Ruby's current regexp engine?
Great, so it *is* possible.. I will look at it tomorrow (C++SWIG).> S> [RCR] remove write-protection of $&, $1-$9, $', $`, $+
>
> No need for this : just write an C extension which do this, and use this
> extension *only* for testing your regexp engine.
>
> Nobody, except you, need to modify these variables.
--
Simon Strandgaard
Simon Strandgaard Guest
-
ts #9
Re: $& write-protected?
>>>>> "S" == Simon Strandgaard <qj5nd7l02@sneakemail.com> writes:
S> Perhaps I should also run the tests agains Oniguruma.
yes, like said previously, Oniguruma will give you different results.
S> Do you know if Oniguruma can coexist with Ruby's current regexp engine?
well, you can have 2 differents ruby : one with Oniguruma, the other with
the GNU regexp
S> Great, so it *is* possible.. I will look at it tomorrow (C++SWIG).
^^^^
no need of SWIG in this case :-)
Guy Decoux
ts Guest
-
Simon Strandgaard #10
Re: $& write-protected?
On Wed, 19 Nov 2003 23:18:12 +0900, Yukihiro Matsumoto wrote:
Good idea for an RCR. I vote yes immediately for a pure MatchData class ;-)> In message "Re: $& write-protected?"
> on 03/11/19, Simon Strandgaard <qj5nd7l02@sneakemail.com> writes:
>
> |[RCR] remove write-protection of $&, $1-$9, $', $`, $+
> |or perhaps let them stay write-protected, but let assignment via const_set
> |become possible?
>
> If you update $~ (the match result), $&, $1, etc. would follow
> accordingly. So that the better RCR should be to create MatchData
> without built-in regular expression match, I think.
--
Simon Strandgaard
Simon Strandgaard Guest
-
Simon Strandgaard #11
Re: $& write-protected?
On Wed, 19 Nov 2003 23:24:17 +0900, ts wrote:
Maybe overkill.> S> Great, so it *is* possible.. I will look at it tomorrow (C++SWIG).>>>>>> "S" == Simon Strandgaard <qj5nd7l02@sneakemail.com> writes:
> ^^^^
> no need of SWIG in this case :-)
My first thought were to extern 'last_match_getter' from 're.c' and
just supply my own last_match_setter. But then I noticed the function are
are 'static' (private).
How do you think I shall implement this ?
server> gcc assign.c -I/usr/home/neoneye/install/ruby-1.8.1
/usr/lib/crt1.o: In function `_start':
/usr/lib/crt1.o(.text+0x81): undefined reference to `main'
/var/tmp//ccu9UXrr.o: In function `Init_Assign':
/var/tmp//ccu9UXrr.o(.text+0x17): undefined reference to `last_match_getter'
/var/tmp//ccu9UXrr.o(.text+0x21): undefined reference to `rb_define_virtual_variable'
server> expand -t4 assign.c
#include <ruby.h>
extern VALUE last_match_getter();
static void last_match_setter(VALUE val) {
/* TODO */
}
void Init_Assign() {
rb_define_virtual_variable("$&", last_match_getter, last_match_setter);
}
server>
Simon Strandgaard Guest
-
ts #12
Re: $& write-protected?
>>>>> "S" == Simon Strandgaard <qj5nd7l02@sneakemail.com> writes:
S> My first thought were to extern 'last_match_getter' from 're.c' and
S> just supply my own last_match_setter. But then I noticed the function are
S> are 'static' (private).
see the struct RMatch in re.h. str is the string, regs are the
registers. ruby use register to retrieve $&, $1, ...
see for example rb_reg_match_pre() ($'), rb_reg_match_post() ($`),
rb_reg_nth_match() ($&, $1, ...)
If you change the struct RMatch, this change will be reflected on $&,
$1, ...
Guy Decoux
ts Guest
-
Weirich, James #13
Re: $& write-protected?
From: [email]matz@ruby-lang.org[/email] [mailto:matz@ruby-lang.org]
Wow, this solves a problem I was dealing with. I wanted to implement "sub"> If you update $~ (the match result), $&, $1, etc. would follow
> accordingly. So that the better RCR should be to create MatchData
> without built-in regular expression match, I think.
on a array-like object such that list.sub(...) would be the same a calling
sub on each element of the list. The problem was that list.sub(/re/) { $1 }
would always give nil for the value of $1.
Here's my solution.
# -----------------------------------------------
class FileList < Array
class << self
attr_accessor :match_data
def set_match_data(md, block)
FileList.match_data = md
eval "$~ = FileList.match_data", block
end
end
def sub(re, &block)
collect do |item|
item.sub(re) {
FileList.set_match_data($~, block)
block.call
}
end
end
end
f = FileList.new
f << "a.c" << "b.c"
p f.sub(/^(.*)\.c$/) { "#{$1}.o" }
# ---------------------------------------------
The above solution is not thread safe, but that can be easily solved by
using a mutex in set_match_data. Comments welcome.
--
-- Jim Weirich / Compuware
-- FWP Capture Services
-- Phone: 859-386-8855
Weirich, James Guest
-
Simon Strandgaard #14
Re: $& write-protected?
On Thu, 20 Nov 2003 00:25:59 +0900, ts wrote:
I bail out, maybe I will look at it tomorrow. I hoped it wouldn't be this>>>>>>> "S" == Simon Strandgaard <qj5nd7l02@sneakemail.com> writes:
> S> My first thought were to extern 'last_match_getter' from 're.c' and
> S> just supply my own last_match_setter. But then I noticed the function are
> S> are 'static' (private).
>
> see the struct RMatch in re.h. str is the string, regs are the
> registers. ruby use register to retrieve $&, $1, ...
>
> see for example rb_reg_match_pre() ($'), rb_reg_match_post() ($`),
> rb_reg_nth_match() ($&, $1, ...)
>
> If you change the struct RMatch, this change will be reflected on $&,
> $1, ...
complicated (im tired). I will follow the other approach and substitution
all occurencies of $& and $1-$9 instead.
Thanks for sharing you wisdom.
BTW: Is there a reason that functions not found in Ruby's .H files, often
has a 'static' tag, so thats impossible to extern them?
Would it make any sense to remove all 'static' tags?
--
Simon Strandgaard
Simon Strandgaard Guest
-
Aredridel #15
Re: $& write-protected?
> If you update $~ (the match result), $&, $1, etc. would follow
Here, here!> accordingly. So that the better RCR should be to create MatchData
> without built-in regular expression match, I think.
I was trying to add some features to the regex engine and couldn't for
similar reasons. (I was trying to leverage the built-in syntax for
regexes, but to match against tree-shaped structures... Don't ask.)
I eventually gave up because I couldn't create MatchData.
Ari
Aredridel Guest
-
Sabby and Tabby #16
Re: $& write-protected?
"Simon Strandgaard" <none> wrote:
class MatchData> That will work. But I also need to so assignment to $1 - $9, $', $`, $+
def MatchData.[](pre, match, post, *captures)
str = [pre, match, post] * ''
match = Regexp.quote(match.dup)
captures.collect! do |cap|
c = Regexp.quote(cap)
i = match.index(c) or raise ArgumentError,
"Not a backreference: #{cap.inspect}"
match[i + c.size, 0] = ')'
match.slice!(0, i) + '('
end
str =~ /#{captures * '' + match}(?=.{#{post.size}}\z)/m
$~
end
end
$~ = MatchData[*%w/alpha beta charlie beta be e ta t a/]
p [$`, $&, $', *$~.captures]
Sabby and Tabby Guest
-
Simon Strandgaard #17
Re: $& write-protected?
On Sun, 23 Nov 2003 06:20:06 -0800, Sabby and Tabby wrote:
[snip fake MatchData class]> "Simon Strandgaard" <none> wrote:
>>>> That will work. But I also need to so assignment to $1 - $9, $', $`, $+Weew, nice. I were starting to believe that this were simply impossible.> $~ = MatchData[*%w/alpha beta charlie beta be e ta t a/]
>
> p [$`, $&, $', *$~.captures]
Surprise of today. I am grateful for your help. Thanks.
--
Simon Strandgaard
Simon Strandgaard Guest



Reply With Quote

